Weekly backup.
This commit is contained in:
66
20220522101323-method_resolution_order.org
Normal file
66
20220522101323-method_resolution_order.org
Normal file
@@ -0,0 +1,66 @@
|
||||
: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__=(<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).
|
||||
|
||||
#+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__=(<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)
|
||||
|
||||
* Références
|
||||
* [[https://python.plainenglish.io/advanced-python-classes-objects-and-mro-423bb01521fb][Advanced Python classes objects and mro - Medium]]
|
||||
|
Reference in New Issue
Block a user