Python-钻石继承树

  1. 钻石继承树

钻石继承树

f1b80e02-b435-4fcb-be7c-8e97049cef91-Image.png

#!/usr/bin/python3

class ParentClass(object):
    def __init__(self):
        print('ParentClass的__init__方法被调用了')

class ParentClass1(ParentClass):
    def __init__(self):
        ParentClass.__init__(self)
        print('ParentClass1的__init__方法被调用了')

class ParentClass2(ParentClass):
    def __init__(self):
        ParentClass.__init__(self)
        print('ParentClass2的__init__方法被调用了')

class ChildClass(ParentClass1, ParentClass2):
    def __init__(self):
        ParentClass1.__init__(self)
        ParentClass2.__init__(self)
        print('ChildClass的__init__方法被调用了')

print(ChildClass.mro())
d = ChildClass()
[root@lyucan ~]# ./20.py
[<class '__main__.ChildClass'>, <class '__main__.ParentClass1'>, <class '__main__.ParentClass2'>, <class '__main__.ParentClass'>, <class 'object'>]
ParentClass的__init__方法被调用了          # ParentClass被调用了两次
ParentClass1的__init__方法被调用了
ParentClass的__init__方法被调用了          # ParentClass被调用了两次
ParentClass2的__init__方法被调用了
ChildClass的__init__方法被调用了

使用super()方法调用父类中被重写的方法

#!/usr/bin/python3

class ParentClass(object):
    def __init__(self):
        print('ParentClass的__init__方法被调用了')

class ParentClass1(ParentClass):
    def __init__(self):
        super().__init__()
        print('ParentClass1的__init__方法被调用了')

class ParentClass2(ParentClass):
    def __init__(self):
        super().__init__()
        print('ParentClass2的__init__方法被调用了')

class ChildClass(ParentClass1, ParentClass2):
    def __init__(self):
        super().__init__()
        print('ChildClass的__init__方法被调用了')

print(ChildClass.mro())
d = ChildClass()
[root@lyucan ~]# ./21.py
[<class '__main__.ChildClass'>, <class '__main__.ParentClass1'>, <class '__main__.ParentClass2'>, <class '__main__.ParentClass'>, <class 'object'>]
ParentClass的__init__方法被调用了        # ParentClass只被调用了一次
ParentClass2的__init__方法被调用了
ParentClass1的__init__方法被调用了
ChildClass的__init__方法被调用了

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 289211569@qq.com