为了账号安全,请及时绑定邮箱和手机立即绑定

关于python多重继承初始化问题

关于python多重继承初始化问题

Maxmengt 2016-02-13 14:55:00
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)

另外,原则上不建议把继承写的太复杂。拙见,求各路大神拍砖指正

查看完整回答
反对 回复 2016-03-08
  • 1 回答
  • 0 关注
  • 3873 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信