1.5 KiB
1.5 KiB
Method Resolution Order
Introduction
Le Method Resolution Order (MRO) est le mécanisme de recherche de méthodes et attributs dans les classes mères, notamment lors d'héritages multiples. Celui-ci est basé sur l'algorithme C3 superclass linearization.
Ordres de résulution
class A:
def func(self):
print("B.func() called")
class B(A):
def func(self):
print("B.func() called")
class C(B, A):
pass
c = C()
c.func()
print(f'{C.__mro__=}')
B.func() called C.__mro__=(<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
Ordre : C -> B -> A -> object
(pour un même niveau d'héritage, de gauche à droite).
class A:
def func(self):
print("A.func() called")
class B:
def func(self):
print("B.func() called")
class C(A, B):
pass
class D(C, B):
pass
d = D()
d.func()
print(f'{D.__mro__=}')
A.func() called D.__mro__=(<class '__main__.D'>, <class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
Ordre : D -> C -> A -> B -> object.
(classe mères, de gauche à droite)