Python › Multiple Inheritance & MRO
How does the C3 linearization algorithm compute a class's MRO?
AdvancedAnswer
C3 linearization merges the MROs of a class's parents plus the list of parents itself, using a rule that a class only appears in the result once all classes that must precede it (per each parent's own MRO and per the declared base-class order) have already been placed. It guarantees three properties: subclasses precede base classes, the local precedence order (order bases are listed) is preserved, and it's monotonic -- the same relative order holds across all related class hierarchies. If no valid linearization exists, Python raises TypeError: Cannot create a consistent MRO.
class A: pass
class B(A): pass
class C(A): pass
class D(B, C): pass
print([c.__name__ for c in D.__mro__])
# ['D', 'B', 'C', 'A', 'object'] -- computed via C3, not simple depth-firstReal-world example Debugging an unexpected method resolution in a complex mixin hierarchy, a developer manually traces the C3 merge rules to understand exactly why one class's method takes precedence over another's.