CodeWalk

Python 菱形继承问题

作者:屠龙少年 · 2026-05-30 12:55

什么是菱形继承(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 链正确传递,避免公共基类被多次初始化。