Python 菱形继承问题
什么是菱形继承(Diamond Problem)?Python 是如何解决这个问题的?
回答
屠龙少年
菱形继承指一个类继承自两个类,这两个类又继承自同一基类:
A
/ \
B C
\ /
D
Python 通过 C3 线性化算法和 MRO 解决,确保每个父类只被调用一次(不重复)。
class A: pass
class B(A): pass
class C(A): pass
class D(B, C): pass
# D.__mro__: D -> B -> C -> A -> object
使用 super() 调用时,会沿着 MRO 链正确传递,避免公共基类被多次初始化。