从python3开始,python多重继承的MRO算法开始唯一使用:C3算法。(此篇只讲c3算法,python之前版本使用的算法暂且不提)
c3算法的核心内容是 merge() 合并。
L(Child(Base1,Base2))= [Child + merge(L(Base1), L(Base2), Base1Base2)]
L(object)= [object]
merge():
- merge中列表都为空,则返回[]。
- 若列表不为空,则按顺序,依次取出列表中的首个数据 X ,和其余的列表进行对比:
1). 如其余的列表(除却每个列表中的首个数据,剩余数据中)包含 X ,查看当前列表是否是merge中的最后一个列表:
不是,则不进行处理,向下重复第二步操作操作。
是,则报出异常。类定义失败。
2).如不包含 X ,则取出 X 到merge外,并把所有列表中的 X 删除,继续向下重复第二步操作操作。
class.__mro__():可以直接查看类的执行顺序。