837 B
837 B
Ordre de résolution des attributs
Introduction
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 = }")
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.