钻石继承树
#!/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