|
|
发表于 2020-4-10 01:05:10
|
显示全部楼层
本帖最后由 Stubborn 于 2020-4-10 01:09 编辑
一个类的 [`__mro__`](https://docs.python.org/zh-cn/3. ... .html#class.__mro__) 属性的三个准则:
- 子类会先于父类被检查
- 多个父类会根据它们在列表中的顺序被检查
- 如果对下一个类存在两个合法的选择,选择第一个父类
这个属于第一个情况,如果没有同一个父类,那么Mro正常是先检查自身,而后从继承的父类或者兄弟类,从左到右检查,父类如果还存在继承,优先被检查。
但是B,C有同一个父类,所以,Mro的顺序是 D - B - C - A - Object
你可以尝试,去掉C的父类,看下Mro的搜索顺序。结合体验下
- class A: pass
- class B: pass
- class C(A, B): pass
- print(C.mro())
- # [<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]
- class D:pass
- class E(C, D):pass
- print(E.mro())
- # [<class '.E'>, <class '.C'>, <class '.A'>, <class '.B'>, <class '.D'>, <class 'object'>]
复制代码 |
|