1. 程式人生 > 實用技巧 >新式類、經典類與多繼承

新式類、經典類與多繼承

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
"""