class A(object):
def __init__(self, a):
print '__init__ A', str(a)
self.A = a
class B(A):
def __init__(self, a, b):
super(B, self).__init__(a)
print '__init__B', str(b)
self.B = b
class C(A):
def __init__(self, a, c):
super(C, self).__init__(a)
print '__init__C', str(c)
self.C = c
class D(B, C):
def __init__(self, a, b, c):
super(D, self).__init__(a, b, c)
print '__init__D', str(d)
self.D = d
shanghe = D('x', 'y', 'z', 'k')Traceback (most recent call last): File "code", line 24, in <module> shanghe = D('x', 'y', 'z', 'k')TypeError: __init__() takes exactly 4 arguments (5 given)请教这份代码错在哪里?
1 回答
清波
TA贡献165条经验 获得超90个赞
首先用super超类初始化多重继承时,容易引起多次继承某些祖先类,比如说楼主代码中的 class A。
其次利用super超类在进行初始化过程中 也遵循 MRO(Method Resolution Order),所以比较适合一些单线继承,楼主的代码其实有点Mixin (mix in)混入的意思,从多个祖先类继承。这是就不能用super了,应该用:
ParentClassName.__init__(self,args)
另外,原则上不建议把继承写的太复杂。拙见,求各路大神拍砖指正
添加回答
举报
0/150
提交
取消