Python:类继承
这两种情况有什么不同Python:类继承,python,python-3.x,Python,Python 3.x,这两种情况有什么不同 # 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继承自
# 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
中定义的内容
您不需要在这里命名B
的所有基类;仅从该类继承:
class C(B):
pass
B
已包含A
,无需再次包含它
更新区域:
注意:
要详细解释您的情况:
在查找实例属性/方法时,Python需要确定在基类中搜索(直接和间接)的顺序。它通过线性化继承图来实现这一点,也就是说,使用一种称为的算法,将基类图转换为一个序列。MRO算法是一种独特的算法,可实现多个理想特性:
B
;第三个约束要求首先出现A
。由于无法满足所有约束,python报告您的继承层次结构是非法的
这不仅仅是一个技术细节。在某些情况下(希望是罕见的),如果在多个类中定义了方法,您可能需要考虑应该使用哪个类来获取您调用的方法。定义基类的顺序会影响此选择
希望这能帮助你理解和帮助你!:)
谢谢 答案应该是英语。好的,很抱歉。我想你已经在第一行代码中写了答案。你能告诉我一些细节或链接吗?但是为什么第二个答案是currect?谢谢你的帮助!你能告诉我更多关于单调性的事吗?我找不到任何答案。为什么继承的类应该是单调的。单调的意思是一个类可以被子类化而不影响其父类的优先顺序。有关更多详细信息和说明,请参阅或