Multiple Inheritance & MRO
Python allows a class to inherit from more than one parent. The Method Resolution Order (MRO) determines which parent's method is called first.
Multiple Inheritance
class Flyable:
def move(self):
return "I fly"
def describe(self):
return "I can fly"
class Swimmable:
def move(self):
return "I swim"
def describe(self):
return "I can swim"
class Duck(Flyable, Swimmable):
def describe(self):
fly = Flyable.describe(self)
swim = Swimmable.describe(self)
return f"Duck: {fly} and {swim}"
d = Duck()
print(d.move()) # "I fly" (Flyable listed first)
print(d.describe()) # Duck: I can fly and I can swimMRO with super()
print(Duck.__mro__)
# (Duck, Flyable, Swimmable, object)
# super() follows MRO — not just "the parent"Diamond Problem
class A:
def greet(self): return "A"
class B(A):
def greet(self): return f"B -> {super().greet()}"
class C(A):
def greet(self): return f"C -> {super().greet()}"
class D(B, C):
pass
print(D().greet()) # B -> C -> A
print(D.__mro__) # D, B, C, A, object