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 回答
慕丝7291255
TA贡献1859条经验 获得超6个赞
更正一下:
super(cls,ins).__init__()返回下一个类的同时,ins并没有变,所以还是A类的实例,所以结果为什么不包含C呢?
添加回答
举报
0/150
提交
取消