任何人都可以解释我为什么__init__()
使用以下代码
class ABC(object):
def __init__(self, **kwargs):
self.x=20
super(ABC, self).__init__(self, **kwargs)
class DEF(object):
def __init__(self, **kwargs):
self.y=30
super(DEF, self).__init__(self, **kwargs)
class XYZ(ABC,DEF):
def __init__(self, **kwargs):
super(XYZ, self).__init__(self, **kwargs)
>>> x=XYZ()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/user/test.py", line 13, in __init__
super(XYZ, self).__init__(self, **kwargs)
TypeError: __init__() takes exactly 1 argument (2 given)
>>> x=XYZ(a=1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/hprem/junk", line 13, in __init__
super(XYZ, self).__init__(self, **kwargs)
TypeError: __init__() takes exactly 1 argument (3 given)
答案 0 :(得分:5)
您无需将self
显式传递给超类__init__
。通过执行super(XYZ, self)
,您创建了一个“知道”self
是什么的“绑定”超级对象。只需super(XYZ, self).__init__(**kwargs)
(同样适用于您的其他电话)。
但请注意,如果传递任何kwargs,此类结构将失败。 object.__init__
不接受任何参数,因此您无法传递任何参数。出于这个原因,直接从object
继承的类通常不能安全地使用super
(除非它在没有参数的情况下显式调用它,在这种情况下根本不需要调用它)。最好创建一个“{1}}和ABC
继承的”最顶层“超类。