新式類、經典類與多繼承
阿新 • • 發佈:2020-08-20
python3所有的類都繼承自object類
新式類:
1.python3中,所有類都是新式類
2.python2中主動繼承object類
經典類:
python2中,不繼承object類
# 多繼承: class A:pass class B(A):pass # B繼承A class C(A):pass # C繼承A class D(B, C):pass # D同時繼承B和C print(D.mro()) # 類的mro方法只在新式類中有,可以檢視該類的繼承順序 # 新式類:廣度優先 可以直接使用類名.mro()方法檢視繼承順序 # 當既可以走廣度又可以走深度時,總是廣度再深度# d = D() # d.屬性或方法時,本身沒有則從父類中找,順序為D-->B-->C-->A # 經典類:總是深度優先 # d = D() # d.屬性或方法時,本身沒有則從父類中找,順序為D-->B-->A-->C """ C3演算法:存在於新式類中,可以通過類.mro()方法檢視繼承順序的結果 如果是單繼承,那麼總是按照子類-->父類的順序來計算
例如: A(O) = [AO] B(A) = [BAO] C(A) = [CAO] D(B) = [DBAO] E(C) = [ECAO] 如果是多繼承,那麼需要按照自己本類,父類1的繼承順序,父類2的繼承順序.... F(D,E) = merge(D(B) + E(C)) = [F] + D(B) + E(C) = [F] + [DBAO] + [ECAO] = FD + [BAO] + [ECAO] = FDB + [AO] + [ECAO] = FDBE + [AO] + [CAO] = FDBEC + [AO] + [AO] = FDBECA + [O] + [O] = FDBECAO"""