任何人都可以解释为什么我得到__init__()正好1参数错误与下面的代码
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)
Run Code Online (Sandbox Code Playgroud)
您不需要self显式传递给超类__init__.通过super(XYZ, self)创建一个"绑定"超级对象,"知道"是什么self.做super(XYZ, self).__init__(**kwargs)(也适用于你的其他电话).
但请注意,如果传递任何kwargs,此类结构将失败. object.__init__不接受任何参数,因此您无法传递任何参数.出于这个原因,直接继承的类object通常不能安全地使用super(除非它显式地调用它而没有参数,在这种情况下根本没有调用它).最好创建一个"最顶层"的超类,ABC并从中DEF继承.