本文为阅读python官方文档之mro详解,所得的一些笔记。
文档地址:https://www.python.org/download/releases/2.3/mro/
python在2.2之后引入了新式类,即继承自object的类。在2.3引入了全新的mro来对继承的顺序等进行管理。
在此之前,python按照从左到右的继承顺序,进行深度优先遍历,得出继承树的顺序。
引入mro后,按照C3算法, 进行线性化。
C3算法:
首先介绍一些记号,C1C2...CN表示一系列类[C1,C2,...CN ]
head = C1 tail = C2...CN,同时,C1+C2...CN = C1C2...CN
假设C继承自B1B2...BN,那么C的mro线性数组为L[C],规则为:C的线性mro数组为C加上C的父类的mro数组和父类的集合的归并。
符号表示为:L[C(B1B2...BN)] = C + merge(L[B1],L[B2],....L[BN],B1B2...BN)
如果C是object类,没有父类,则L[C] = C
归并的算法表示如下:取第一个列表的head,如L[B1][0],如果head没有在之后任一的列表中的tail中出现,那么把它加在C的mro数组中,然后将它从所有的列表中移除。
重复该操作,直到找不到满足条件的head。
例子1:
class A(object):pass
clas