猿问

多继承的问题

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 A
enter B
enter D
enter E
enter F
enter Z
leave Z
leave F
leave E
leave D
leave B
leave A
(<class '__main__.A'>, <class '__main__.B'>, <class '__main__.D'>, <class '__main__.C'>, <class '__main__.E'>, <class '__main__.F'>, <class '__main__.Z'>, <class 'object'>)

RISEBY
浏览 629回答 3
3回答

MMTTMM

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

慕丝7291255

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

慕田峪4524236

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

相关分类

Python
我要回答