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

问题描述 投票:0回答:1

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

python inheritance multiple-inheritance
1个回答
1
投票

这是一个复杂的主题......根据哪个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                                                                                                                  

如果我们创建一个继承EC的新类D会发生什么? 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
© www.soinside.com 2019 - 2024. All rights reserved.