#type_1
class Base:
def __init__(self):
print("Base开始被调用")
print("Base结束被调用")
class Base_A:
def __init__(self):
print("Base_A开始被调用")
print("Base_A结束被调用")
class A(Base):
def __init__(self):
print("A开始被调用")
super().__init__() # 1
print('A结束被调用')
class B(Base_A):
def __init__(self):
print("B开始被调用")
super().__init__() # 2
print('B结束被调用')
class C(A,B):
#class C(B, A):
def __init__(self):
print("C开始被调用")
#super().__init__() # 3
super().__init__() # 3
print('C结束被调用')
if __name__ == '__main__':
c = C()
type_1输出为:
C开始被调用
A开始被调用
Base开始被调用
Base结束被调用
A结束被调用
C结束被调用
#type_2
class Base:
def __init__(self):
print("Base开始被调用")
print("Base结束被调用")
class Base_A:
def __init__(self):
print("Base_A开始被调用")
print("Base_A结束被调用")
class A(Base):
def __init__(self):
print("A开始被调用")
super().__init__() # 1
print('A结束被调用')
class B(Base_A):
def __init__(self):
print("B开始被调用")
super().__init__() # 2
print('B结束被调用')
#class C(A,B):
class C(B, A):
def __init__(self):
print("C开始被调用")
#super().__init__() # 3
super().__init__() # 3
print('C结束被调用')
if __name__ == '__main__':
c = C()
type_2输出为:
C开始被调用
B开始被调用
Base_A开始被调用
Base_A结束被调用
B结束被调用
C结束被调用
由type_1与type_2中class C(A,B):class C(B, A)调用顺序,可得出super只执行被继承的首个对象的__init__ 函数。
#type_3
class Base:
def __init__(self):
print("Base开始被调用")
print("Base结束被调用")
class A(Base):
def __init__(self):
print("A开始被调用")
super().__init__() # 1
print('A结束被调用')
class B(Base):
def __init__(self):
print("B开始被调用")
super().__init__() # 2
print('B结束被调用')
class C(A,B):
def __init__(self):
print("C开始被调用")
super().__init__() # 3
print('C结束被调用')
if __name__ == '__main__':
c = C()
type_3输出为:
C开始被调用
A开始被调用
B开始被调用
Base开始被调用
Base结束被调用
B结束被调用
A结束被调用
C结束被调用
而如果A,B皆来自与一个对象,则只调用一次A,B的父级函数
来源:CSDN
作者:gcgaochuang
链接:https://blog.csdn.net/gcgaochuang/article/details/103934024