class A:
def __init__(self,name):
self.name=name
class B(A):
def __init__(self,name,add):
super().__init__(name)
self.add = add
class C(A):
def __init__(self,name,tel):
super().__init__(name)
self.tel = tel
class D(B,C):
def __init__(self,name,add,tel,company):
super().__init__(name,add)
super().__init__(name,tel)
self.company = company
d = D('Hank','ctm',55514,'google')
该错误是由调用类
B
中的super().__init__(name)
引起的。与Java等单一继承语言不同,Python中的super()
不一定给出超类;它给出了method resolution order中的下一个类。类D
的MRO如下:如您所见,MRO中
B
之后的下一个类是C
,因此对super().__init__(name)
的调用使用单个参数调用C.__init__
。但是,C.__init__
方法需要两个参数,因此仅用一个参数调用它会导致您看到的错误。你知道吗这种多重继承的解决方案是协同设计类,请参见Raymond的文章Python’s super() considered super!:
正如其他人指出的,这将遵循MRO,例如
D -> B -> C - A
。你知道吗相关问题 更多 >
编程相关推荐