:PROPERTIES: :ID: 1512a18b-221a-4f15-90a0-9ccac023dfd6 :mtime: 20220528175444 :ctime: 20220522101323 :END: #+title: 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 [[https://en.wikipedia.org/wiki/C3_linearization][C3 superclass linearization]]. * Ordres de résulution #+BEGIN_SRC python :results output 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__=}') #+END_SRC #+RESULTS: : B.func() called : C.__mro__=(, , , ) Ordre : ~C -> B -> A -> object~ (pour un même niveau d'héritage, de gauche à droite). #+BEGIN_SRC python :results output 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__=}') #+END_SRC #+RESULTS: : A.func() called : D.__mro__=(, , , , ) Ordre : ~D -> C -> A -> B -> object.~ (classe mères, de gauche à droite) * Références * [[https://python.plainenglish.io/advanced-python-classes-objects-and-mro-423bb01521fb][Advanced Python classes objects and mro - Medium]]