Trong khi đọc mã OpenStack và tôi đã gặp phải điều này.Phương thức __init __() của đối tượng làm gì trong python?
Lớp học có tên 'Dịch vụ' kế thừa đối tượng của lớp cơ sở ', và sau đó trong phương thức __init__()
của Dịch vụ, đối tượng được gọi là __init__
. Mã liên quan như sau:
định nghĩa lớp:
class Service(object):
và định nghĩa phương pháp init Dịch vụ của:
def __init__(self, host, binary, topic, manager, report_interval=None,
periodic_interval=None, *args, **kwargs):
và một cuộc gọi đến siêu (các 'đối tượng' ở đây) trong init Dịch vụ của :
super(Service, self).__init__(*args, **kwargs)
Tôi không hiểu cuộc gọi cuối cùng, object.__init__()
điều gì thực tế Reason? có ai giúp được không?
tham chiếu [Siêu chú ý của Python Super] (http://rhettinger.wordpress.com/2011/05/26/super-considered-super/) giúp ích rất nhiều. Cảm ơn! –
Hàm tạo 'ColoredService' cho phép, ví dụ: 'foo = 'bar'' được truyền, nhưng điều này cuối cùng sẽ thất bại với' TypeError: object .__ init __() không có tham số'. Vì vậy, những gì là điểm trong đi qua '* args' và' ** kwargs' trong 'super' các cuộc gọi cho các lớp' Service' và 'Color'? Ví dụ của bạn sẽ làm việc giống nhau mà không có chúng (và sẽ mạnh mẽ hơn). – ekhumoro
@ekhumoro Nhận xét đó nên được hướng dẫn tại các nhà văn của OpenStack. Phần '' * args'' là từ mã của họ và người gọi phải tôn trọng chữ ký đó. Tôi vừa thêm * Color * và * ColoredService * để hiển thị cách MRO có thể chuỗi từ * Service * đến * Color * to * object *. –