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__)