[英]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.