在 Python 多重继承问题中会发生什么



我写了两个类"A"和"B",在这两个类中,您都添加了同名的方法,称为"print"。然后我写了另一个类"C",它扩展了"A"和"B",如下所示:"类C(A,B(:",如果我从类"C"的实例中调用"print",那么会发生什么

这是一个

复杂的主题...根据哪个 Python 版本和类的声明方式,情况会有所不同。

然而,在 Python3 中,有一个简单的解决方案......例如:

class A:
    pass
class B:
    pass
class C(A, B):
    pass
print(C.__mro__)

将显示(__main__.C, __main__.A, __main__.B, object)意思,即在查找方法时将首先搜索类C,然后是A,然后是B,最后是object

请注意,在某些情况下,Python 不允许创建令人困惑的类层次结构......考虑:

class A: pass                                                                                                                        
class B: pass                                                                                                                        
class C(A, B): pass                                                                                                                  
class D(B, A): pass                                                                                                                  

如果我们创建一个从CD继承的新类E会发生什么?A应该在B之前还是之后搜索B?Python解决方案很简单:

class E(C, D): pass                                                                                                                  
----> 1 class E(C, D): pass
TypeError: Cannot create a consistent method resolution
order (MRO) for bases A, B

最新更新