:PROPERTIES:
:ID:       e9a0cb94-ee68-4dfd-9013-c83ce2a18481
:mtime:    20220516155419
:ctime:    20220516155011
:END:
#+title: Ordre de résolution des attributs

* Introduction
#+BEGIN_SRC python :results output
class A:
    answer = 42
    def __init__(self):
        self.answer = 21
        self.__add__ = lambda x, y: x.answer + y

    def __add__(self, y):
        return self.answer - y

print(f"{A() + 5 = }")
#+END_SRC

#+RESULTS:
: A() + 5 = 16

* Explication
Afin de résoudre les noms, Python cherche au niveau de l'instance, puis à celui de la classe et enfin à celui des
classes parentes, sauf pour les /dunder methods/ pour lesquelles Python cherche directement au niveau de la classe.

* Référence
 * [[https://medium.com/@saint_sdmn/10-hardest-python-questions-98986c8cd309][10 Hardest Python Questions - Medium]]

