Method Resolution Order in Python Multiple Inheritance

Handling Method Conflicts in Multiple Inheritance

When dealing with multiple inheritance, Python follows the Method Resolution Order (MRO) too resolve conflicts between methods with the same name. The MRO follows a left-to-right, depth-first search pattern.

Left Class Priority (No Direct Method)

When the left base class doesn't directly contain the method:

class Base:
    def show(self):
        print('Base class')

class LeftChild(Base):
    pass

class RightChild(Base):
    def show(self):
        print('Right child override')

class MultiInherit(LeftChild, RightChild):
    def __init__(self):
        self.show()

instance = MultiInherit()

Output shows RightChild's method takes precedence when LeftChild doesn't directly implement it.

Multi-Level Inheritance Impact

class Root:
    def render(self):
        print('Root method')

class Intermediate(Root):
    def render(self):
        print('Intermediate override')

class LeftBranch(Intermediate):
    pass

class RightBranch(Root):
    def render(self):
        print('Right branch override')

class Composite(LeftBranch, RightBranch):
    def __init__(self):
        self.render()

obj = Composite()

Here LeftBranch's inherited method from Intermediate takes priority due to deeper inheritance depth.

Key Resolution Rules:

  1. Direct Implementation: If the left class direct implements the method, it always takes precedence
  2. Same Inheritance Line: When both classes inherit from the same ancestor, deeper inheritance depth wins
  3. Different Branches: For unrelated inheritance paths, left class always has priority

Python's MRO ensures predictable method resolution while maintaining logical consistency across inheritance hierarchies.

Tags: python Inheritance object-oriented multiple-inheritance method-resolution

Posted on Thu, 14 May 2026 09:35:48 +0000 by nuying117