class Base(object):
def __init__(self):
print("enter Base")
print("leave Base")
class A(Base):
def __init__(self):
print("enter A")
super(A, self).__init__()
print("leave A")
class B(Base):
def __init__(self):
print("enter B")
super(B, self).__init__()
print("leave B")
class D(Base):
def __init__(self):
print("enter D")
# super(D, self).__init__()
print("leave D")
class C(A, B, D):
def __init__(self):
print("enter C")
super(C, self).__init__()
print("leave C")
C()
# 1,
# 如果多继承的各个类都有调用super().__init__(),继承类左侧到右开始执行,首先A类执行__init__方法,当A类看到自身的Super()后,程序
# 去B类(即右侧的继承类中查看是否也有调用Super().__init__())查看是否调用了super().__init__(),如果有则在B类中向下执行,执行完B类则回到
# A类中,执行完A类回到C中。
#2
# 如果最左侧的类(此例中是A类)中没有super().__init__()方法,则程序在左侧类执行后会直接回到子类,无论是新式类或是经典类都是如此。
#3
# 如果左侧类中有Super().__init__() 而右侧的继承类中没有,当执行到A类中时看到super().__init__() 则程序进入都右侧继承类中,但在B类中未看到
# 则在B中向下执行,完毕后返回A,父类的__init__不会被调用,如果有D类,亦如此。
print(C.mro())