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

时间:2019-04-13 16:26:54

标签: python inheritance multiple-inheritance

我写了两个类“ A”和“ B”,在这两个类中您都添加了具有相同名称的方法“ print”。然后,我写了另一个类“ C”,它像这样扩展了“ A”和“ B”:“类C(A,B):”,如果我从类“ C”的实例中调用“ print”,那会发生

1 个答案:

答案 0 :(得分: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