python-C3アルゴリズム

  • 承継の各クラスの順序は、子クラスに親から見ました
  • 順次[現在のクラス] + [親クラスの継承の順序]間の有向関係を形成します
  • クラスが右に最初の左側に表示され、表示される以降の順序で順番に、後に表示されますが、しない場合は、まだ最初の注文は、その後、抽出されたクラスを置きます

20190327153109.png
:単一継承を知ることは容易であるタイプB、によって知ることができる、C及びDである
L(B)= [BFGO] L(C)= [CEO] L(D)= [DGO]

このように:

L(A) = L(B) +L(C) + L(D)
A = [BFGO]+[CEO]+[DGO]
AB = [FGO]+[CEO]+[DGO]
ABF = [GO]+[CEO]+[DGO]
ABFC = [GO]+[EO]+[DGO]
ABFCE = [GO]+[O]+[DGO]
ABFCED = [GO]+[O]+[GO]
ABFCEDG = [O]+[O]+[O]
ABFCEDGO
 #即顺序为:A->B->F->C->E->D->G->O

20190327154600.png

L(B)=[BDEO] L(C)=[CEFO]
L(A)=L(B) + L(C)
A = [BDEO]+[CEFO]
AB = [DEO]+[CEFO]
ABD = [EO]+[CEFO]
ABDC = [EO]+[EFO]
ABDCE = [O]+[FO]
ABDCEF = [O]+[O]
ABDCEFO
# 即顺序为:A->B->D->C->E->F->O

コードをテストします。

class D: pass
class E: pass
class F: pass
class B(D,E): pass
class C(E,F): pass
class A(B,C): pass


print(A.mro())
print(B.mro())
print(C.mro())
print(D.mro())

'''
[<class '__main__.A'>, <class '__main__.B'>, <class '__main__.D'>, <class '__main__.C'>, <class '__main__.E'>, <class '__main__.F'>, <class 'object'>]
[<class '__main__.B'>, <class '__main__.D'>, <class '__main__.E'>, <class 'object'>]
[<class '__main__.C'>, <class '__main__.E'>, <class '__main__.F'>, <class 'object'>]
[<class '__main__.D'>, <class 'object'>]

'''

20190327160915.png

class A1: pass
class A2: pass
class A3: pass
class B1(A1,A2): pass
class B2(A2): pass
class B3(A2,A3): pass
class C1(B1): pass
class C2(B1,B2): pass
class C3(B2,B3): pass
class D(C1, C2, C3): pass

print(D.mro())
# D-C1-C2-B1-A1-C3-B2-B3-A2-A3-O
'''
[<class '__main__.D'>, <class '__main__.C1'>, <class '__main__.C2'>, <class '__main__.B1'>, <class '__main__.A1'>, <class '__main__.C3'>, <class '__main__.B2'>, <class '__main__.B3'>, <class '__main__.A2'>, <class '__main__.A3'>, <class 'object'>]
'''

20190327180109.png

class A(object):pass
class B(A):pass
class C(A):pass
class D(A):pass
class E(B):pass
class F(C):pass
class G(D):pass
class H(E,F,G):pass

print(H.mro())

"""
[<class '__main__.H'>, <class '__main__.E'>, <class '__main__.B'>, <class '__main__.F'>, <class '__main__.C'>, <class '__main__.G'>, <class '__main__.D'>, <class '__main__.A'>, <class 'object'>]
"""

おすすめ

転載: www.cnblogs.com/yangchangjie150330/p/10608319.html
おすすめ