1. 程式人生 > >mro之C3算法

mro之C3算法

我們 如果 div bsp 部分 clas bec 滿足 繼承

mro之C3算法

# C3算法 歸並算法 class A(object): pass class B(A): pass class C(A): pass class D(B): pass class E(C): pass class F(D, E): pass print(F.__mro__) ######################### # 第一步先找到繼承的父類的MRO # D = [D, B, A, O] # E = [E, C, A, O] # 第二步 把父類這兩個MRO 和 DE 進行歸並 # 取每個表表頭 並且其他表內容部分不能含有我們要取的那個表頭 # 如果不滿走就去取第二個表頭 # merge([DBAO], [ECAO], [DE]) # D在表頭(第一位,而其他的內容部分都沒有D,[BAO],[CAO],故滿足要求) # FD merge([BAO], [ECAO], [E]) # B在表頭(第一位,而其他的內容部分都沒有B,[AO],[CAO],故滿足要求) # FDB merge([AO], [ECAO], [E]) # A在表頭(第一位,而其他的內容部分有A,[AO],[CAO],故不滿足要求,看第二個列表[ECAO]) # E在表頭(第一位,而其他的內容部分都沒有E,[AO],[CAO],故滿足要求 # FDBE merge([AO], [CAO]) # C在表頭(第一位,而其他的內容部分都沒有C,[AO],[AO],故滿足要求,AO以此類推 # FDBEC merge([AO], [AO]) # FDBECAO

mro之C3算法