首页 > 编程语言 > 详细

python3 super().__init__() 和 __init__() 的区别

时间:2019-08-29 10:45:27      阅读:492      评论:0      收藏:0      [点我收藏+]

1、单继承

super().__int__()和 Base.__init__(self)是一样的, super()避免了基类的显式调用。

class Base(object):
    def __init__(self):
        print(Create Base)

class ChildClassA(Base):
    def __init__(self):
        print(Create ChildClassA)
        super().__init__()

ChildClassA()
#输出
#Create ChildClassA
#Create Base

2、多继承

注意:多继承时,会设计继承顺序,supper()相当于返回继承顺序的下一个类,而不是父类。

def GetSupperOrder(class_name,self):
    mro = self.__class__.mro()
    # #mro()用来获得类的继承顺序。
    return mro[mro.index(class_name) + 1]

class Base(object):
    def __init__(self):
        print(Create Base)

class ChildClassA(Base):
    def __init__(self):
        print(Enter ChildClassA)
        super().__init__()
        print(Leave ChildClassA)

class ChildClassB(Base):
    def __init__(self):
        print(Enter ChildClassB)
        super().__init__()
        print(Leave ChildClassB)

class ChildClassC(ChildClassA,ChildClassB):
    pass

c = ChildClassC()
print(c.__class__.__mro__)
# 输出:
#Enter ChildClassA
#Enter ChildClassB
#Create Base
#Leave ChildClassB
#Leave ChildClassA
#(<class ‘__main__.ChildClassC‘>, <class ‘__main__.ChildClassA‘>, <class ‘__main__.ChildClassB‘>, <class ‘__main__.Base‘>, <class ‘object‘>)

从以上结果,可以看出:
super()和父类没有关系,继承执行的顺序是 ChildClassA → ChildClassB → Base

 

python3 super().__init__() 和 __init__() 的区别

原文:https://www.cnblogs.com/AndyChen2015/p/11428212.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!