[英]Python: Class inherit
兩種情況有何不同?
# Error: Cannot create a consistent method resolution order (MRO) for bases A, B
class A:
pass
class B(A):
pass
class C(A, B):
pass
# Current situation
class A:
pass
class B(A):
pass
class C(B, A):
pass
您的C
繼承自B
和A
因為B
已經從A
繼承了,所以Python現在無法確定首先查找哪個類的方法。 A
或B
,它將覆蓋A
定義A
。
您無需在此處命名B
所有基類; 只是從該類繼承:
class C(B):
pass
B
已經包含A
,您無需再次包含它。
更新區域:
注意:
為您詳細說明:
在查找實例屬性/方法時,Python需要確定以哪種順序搜索(直接和間接)基類。 它通過使用C3或MRO算法將繼承圖線性化(即通過將基類的圖轉換為序列)來實現此目的。 MRO算法是一種獨特的算法,可以實現幾個理想的屬性:
對於您的代碼,第二個約束要求B
首先出現; 第三個約束條件要求A
首先出現。 由於無法滿足所有約束,因此python報告您的繼承層次結構是非法的。
這不僅是技術細節。 在某些(希望很少)的情況下,如果方法是在多個類中定義的,則可能需要考慮應使用哪個類來獲取所調用的方法。 定義基類的順序會影響此選擇。
希望這可以幫助您理解並幫助您! :) 謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.