C3算法

面向对象
经典类
    深度优先
新式类
    广度优先 C3算法
    super mro顺序

merge一种算法
    如果第一个节点,也是其他的继承顺序的第一个节点或者没有在其他节点出现,
    那么就把这个节点移出去,作为mro顺序的一个节点

mro(A) = [AO]
mro(B) = [B] + merge(mro(A))
       = [B] + merge([AO])
       = [BA] + merge([O])
       = [BAO]
mro(C) = [C] + merge(mro(A))
       = [CAO]
mro(D) = [D] + merge(mro(B)+mro(C) + [BC])
       = [D] + merge([BAO],[CAO],[BC])
       = [DB] + merge([AO],[CAO],[C])
       = [DBC] + merge([AO],[AO])
       = [DBCA] + merge([O],[O])
       = [DBCAO]

mro(A) = [AO]
mro(B) = [BA0]
mro(C) = [CA0]
mro(D) = [DA0]
mro(E) = [E] + merge(mro(B)+MRO(C)+[BC])
mro(E) = [E] + merge([BA0]+[CA0]+[BC])
mro(E) = [EB] + merge([A0]+[CA0]+[C])
mro(E) = [EBC] + merge([A0]+[A0])
mro(E) = [EBCAO]
mro(F) = [F] + merge(mro(C)+MRO(D)+[CD])
mro(F) = [F] + merge([CA0]+ [DA0]+[CD])
mro(F) = [FC] + merge([A0]+ [DA0]+[D])
mro(F) = [FCD] + merge([A0]+ [A0])
mro(F) = [FCDAO]
mro(G) = [G] + merge(mro(E)+mro(F)+[EF])
mro(G) = [G] + merge([EBCAO]+[FCDAO]+[EF])
mro(G) = [GE] + merge([BCAO]+[FCDAO]+[F])
mro(G) = [GEB] + merge([CAO]+[FCDAO]+[F])
mro(G) = [GEBF] + merge([CAO]+[CDAO])
mro(G) = [GEBFC] + merge([AO]+[DAO])
mro(G) = [GEBFCD] + merge([AO]+[AO])
mro(G) = [GEBFCDAO]

mro(A) = [AO]
mro(C) = [CAO]
mro(B) = [B] + merge(mro(A),mro(C),[AC])
       = [B] + merge([AO],[CAO],[AC])
class A():pass
class C(A):pass
class B(C):pass
class D(B,C):pass
print(D.__mro__)

 

转载于:https://www.cnblogs.com/ls13691357174/p/9430554.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值