Python-Mro方法解析顺序

文章目录
  1. 1. C3

MRO(method resolution order, 方法解析顺序)是类继承中的一个问题。由于类可能继承多个基类,那么当触发多态时就面临这一个问题:从哪个基类里面去找方法?换句话说,类的遍历(解析)顺序是什么?

当只有一个基类时这个问题很简单,因此一般讨论的是多个基类的解析顺序。

C3

Python3.x采用的是C3算法:如果C继承了N个基类 (B1, B2, …, Bn),那么C的方法解析顺序由下式给出

L[C] = [C] + merge(L[B1], L[B2], …, L(Bn), [B1, B2, …, Bn])

其中merge函数的定义是这样的

  1. H = L[B1]head
  2. H是否出现在了其他list的尾部?
    1. 否:则弹出H,移除其他列表中的H(如有),回到step 1
    2. 是:假设H出现在T的尾部,则将H 修改为 Thead,回到step2
  3. 直到列表为空(成功)或者你不能找到可弹出的元素(失败TypeError