Python的super()一些探索

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())

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值