python mro c3_python的MRO和C3算法
classA:pass
classB(A):pass
classC(A):pass
classD(B, C):pass
classE(C, A):pass
classF(D, E):pass
classM:pass
classN(M):pass
classP(E, A):pass
classX:pass
classQ(P,N,X):pass
classG(Q, F):pass
classH(G, F):pass加法:merge(),拿第一項的第一位和后面項除了第一位的每位比較,如果沒有出現,則該位元素算出
如果出現了,此時開始下一項的第一位繼續和后面項除了第一位的每一位比較,
如果后邊項里除了第一位的其他位出現有,則繼續開始拿下一項的第一位和后一項除了第一位的其他位做比較
如果后邊項沒有出現,取完這一項的第一位后,重新返回第一項繼續執行判斷第一項的第一位與后邊項除了第一位比較
比如
F+ DBCA + ECA +DE
DBCA+ ECA +DE
BCA+ ECA +E
CA+CA
A+A
思路:
第一次拿第一項的第一位F與DBCA,ECA,DE比較,這三個數除了第一位后面的每一項都沒有F出現,
所以把所有的F消除,取值F
第二次拿第二項DBCA的第一位D與ECA,DE比較,這兩數中除了第一位后邊的每一項都沒有D出現,
所以就把所有的D消除,然后取值D
第三次拿第二項BCA的B與ECA,E比較,這兩個數中除了第一位后邊的每一項都沒有B出現,
所以就把所有的B消除,取值B
第四次拿第二項CA的C與ECA,E比較,ECA出現了C,所以不動CA,然后拿下一項的ECA的第一位E與最后一項的值E做比較,
因為ECA的E重復了最后一項E,所以也不動ECA,然后拿最后一項的E與后邊作比較,因為后邊沒項值,
所以消除所有的E,取值E
第四次拿返回開頭拿第二項CA中的C與后邊的項CA做比較,因為后邊項中除了第一位,其他位沒有C,
所以消除所有的C,取值C
第五次拿第二項的A與后邊的項A做比較,因為后邊項值有A,所有拿后邊項A與后邊項做比較,因為后邊項沒有值,
所以消除所有的A,取值A
結果
FDBECA
求H的MRO
設求MRO的算法是L
解析步驟:
拆分 合并
L(H)= H + L(G) + L(F) + GF #H + GQPFDBECANMX + FDBECA + GF = HGQPFDBECANMX
L(G) = G + L(Q) + L(F) + QF #G + QPECANMX + FDBECA + QF = GQPFDBECANMX
L(Q) = Q + L(P) + L(N) + L(X) + PNX #Q + PECA + NM + X + PNX = QPECANMX
L(X) = X #X
L(P) = P + L(E) + L(A) + EA #P + ECA + A + EA = PECA
L(N) = N + L(M) + M #N + M + M = NM
L(M) = M #M
L(F) = F + L(D) + L(E) + DE #F + DBCA + ECA + DE = FDBECA
L(E) = E + L(C) + L(A) + CA #E + CA + A + CA = ECA
L(D) = D + L(B) + L(C) + BC #D + BA + CA + BC = DBCA
L(C) = C + L(A) + A #C + A + A = CA
L(B) = B + L(A) + A #B + A + A = BA
L(A) = A #A
所以結果是
HGQPFDBECANMX
和電腦運算的結果一致print(H.__mro__)
總結
以上是生活随笔為你收集整理的python mro c3_python的MRO和C3算法的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 定向培养士官考军校的科目有什么?
- 下一篇: 数据结构排序算法实验报告_[数据结构与算
