Python 高级编程和异步IO并发编程 --04_5 类和实例属性以及查找顺序---mro查找

类属性:定义在类内部的变量,或者是方法。

Python 高级编程和异步IO并发编程 --04_5 类和实例属性以及查找顺序---mro查找

Python 高级编程和异步IO并发编程 --04_5 类和实例属性以及查找顺序---mro查找

多继承(MRO:Method Resolution Order,C3算法)

DFS:Deep First Search

Python 高级编程和异步IO并发编程 --04_5 类和实例属性以及查找顺序---mro查找

Python 高级编程和异步IO并发编程 --04_5 类和实例属性以及查找顺序---mro查找

当继承关系为菱形,DFS:A先查B,然后D,D找不到,再去搜索C。由于C也有继承D,这样会导致部分C从D继承的特性搜索不到(C覆盖了D的方法)。因此,过渡到广度优先算法BFS

Python 高级编程和异步IO并发编程 --04_5 类和实例属性以及查找顺序---mro查找

Python 高级编程和异步IO并发编程 --04_5 类和实例属性以及查找顺序---mro查找

在上面的多继承场合,BFS就出现问题。如果D/C/B中有一个同名的方法,比如get,B中找不到get,就回去C中找,但是B是由D继承而来,C没有继承D,B和D应该看作一个整体,D应该在C之前找,导致C的方法覆盖掉D。

从Python2.3之后,属性查找算法统一为C3算法。

Python 高级编程和异步IO并发编程 --04_5 类和实例属性以及查找顺序---mro查找

Python 高级编程和异步IO并发编程 --04_5 类和实例属性以及查找顺序---mro查找