多继承的 MRO问题
- Python3 类的 __mro__ 属性
- 作用:用来记录类的方法查找顺序
- 哪个对象调用方法,按照相应对象的__mro__属性顺序查找调用父类方法
示例
class A:
def go(self):
print('A')
class B(A):
def go(self):
print('B')
super().go() # C !!!!!! 已经被更改了继承关系
class C(A):
def go(self):
print('C')
super().go() # A
class D(B, C):
def go(self):
print('D')
super().go() # B
d = D()
d.go() # D
print(D.__mro__)
# c3 算法得到的 __mro__ 属性
# 得到一个元组,此元组根据不同对象调用时,会重新‘定义’的各个类的父子关系
'''
(<class '__main__.D'>,
<class '__main__.B'>,
<class '__main__.C'>,
<class '__main__.A'>,
<class 'object'>)
'''
# 在由 D 创建的对象在调用父类的方法时
# 重新规定了他们的父子继承关系(也就是查找调用方法的顺序)
# D --> B ---> C---> A---> object
# 查找父类按照这个顺序查找,找到即止