c3算法:python多继承查找规则

从python3开始,python多重继承的MRO算法开始唯一使用:C3算法。(此篇只讲c3算法,python之前版本使用的算法暂且不提)
c3算法的核心内容是 merge() 合并。

L(Child(Base1,Base2))= [Child + merge(L(Base1), L(Base2), Base1Base2)]
L(object)= [object]

merge():

  1. merge中列表都为空,则返回[]。
  2. 若列表不为空,则按顺序,依次取出列表中的首个数据 X ,和其余的列表进行对比:
    1). 如其余的列表(除却每个列表中的首个数据,剩余数据中)包含 X ,查看当前列表是否是merge中的最后一个列表:
    不是,则不进行处理,向下重复第二步操作操作。
    是,则报出异常。类定义失败。
    2).如不包含 X ,则取出 X 到merge外,并把所有列表中的 X 删除,继续向下重复第二步操作操作。

class.__mro__():可以直接查看类的执行顺序。

上一篇:C3


下一篇:git 的 HEAD~ 和 HEAD^ 区别