"""
在python3 里面,使用super当有多继承的情况出现的时候,有时候会出现调用父类init调用不到,
因为在python3 里面有一个默认来处理类之间调用顺序的c3 算法,c3用来保证每个类只调用一次的算法,所有通过super 来进行调用的时候都会根据里面的顺序来进行调用
在类中可以通过 Class.__mro__ 来获得当前类中继承调用的顺序
"""
class Parent(object):
def __init__(self, name, *args, **kwargs):
print("parent 被调用")
self.name = name
print("parent 调用结束")
class Son1(Parent):
def __init__(self, name, age, *args, **kwargs):
print("Son1被调用")
self.age = age
super(Son1, self).__init__(name, *args, **kwargs)
print("Son1调用结束")
class Son2(Parent):
def __init__(self, name, gender, *args, **kwargs):
print("Son2被调用")
self.gender = gender
super(Son2, self).__init__(name, *args, **kwargs)
print("Son2调用结束")
class GrandSon(Son1, Son2):
def __init__(self, name, age, gender, *args, **kwargs):
print("grandson 被调用")
super(GrandSon, self).__init__(name, age, gender, *args, **kwargs)
print("grandson调用结束")
if __name__ == '__main__':
print(GrandSon.__mro__)
GrandSon("张三", 13, "男")
Python-多继承中MRO顺序
最新推荐文章于 2024-01-05 19:44:43 发布