面向对象的多继承 c3算法

经典类

  深度优先

新式类

  广度优先 c3suanfa

  super mro顺序

mergo 一种算法

  如果第一个节点,也是其他的继承顺序的第一个节点,或者没有在其他节点出现

  那么就把这个节点移出去,作为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__)

  

猜你喜欢

转载自www.cnblogs.com/lnrick/p/9418816.html