Files
org-roamings/20220516155011-ordre_de_resolution_des_attributs.org
2022-06-04 12:57:39 +02:00

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.