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

多继承的问题

多继承的问题

RISEBY 2019-02-18 11:49:36
1.查了很多资料,以为已经对多继承的顺序算法了解了,但是自己测试还是有很多‘矛盾’,大概是只理解了表面意思。代码是一个我自己写的多继承的测试,我也在网上查了super()的用法【返回__mro__列表的第二个类,第一个是本身】,我理解的结果是A-B-D-Z依次执行,但结果还包含了E、F的初始化过程,想了一下午仍然搞不懂为什么?求助。2.代码如下:class Z(): def __init__(self): print('enter Z') print('leave Z') class D(Z): def __init__(self): print('enter D') super().__init__() print('leave D') class E(Z): def __init__(self): print('enter E') super().__init__() print('leave E') class F(Z): def __init__(self): print('enter F') super().__init__() print('leave F') class B(D,E): def __init__(self): print('enter B') super().__init__() print('leave B') class C(E,F): def __init(self): print('enter C') super().__init__() print('leave C') class A(B,C): def __init__(self): print('enter A') super().__init__() print('leave A') a = A()print(A.__mro__) 3.执行结果enter Aenter Benter Denter Eenter Fenter Zleave Zleave Fleave Eleave Dleave Bleave A(<class '__main__.A'>, <class '__main__.B'>, <class '__main__.D'>, <class '__main__.C'>, <class '__main__.E'>, <class '__main__.F'>, <class '__main__.Z'>, <class 'object'>)
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

因为你的C类的init后面少了两横啊。

查看完整回答
反对 回复 2019-03-01
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

更正一下:
super(cls,ins).__init__()返回下一个类的同时,ins并没有变,所以还是A类的实例,所以结果为什么不包含C呢?

查看完整回答
反对 回复 2019-03-01
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

多重继承,A都是继承了B,和C ,先继承靠左的类即B,依次网上推,之后再继承C,C继承自EF,EF的实例过程就有了。不知道能不能把理解到。

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 625 浏览
慕课专栏
更多

添加回答

举报

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