python多继承的问题

亡梦爱人 提交于 2020-01-11 16:12:34
#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的父级函数

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!