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
相關文章
相關標籤/搜索