Weekly backup.

This commit is contained in:
2022-06-04 12:57:39 +02:00
parent e552583393
commit 015b896f65
68 changed files with 3530 additions and 27 deletions

View 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]]