python多继承的问题

#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的父级函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值