Méthodes spéciales (dunder) : __str__, __eq__, __len__…
Personnalise le comportement de tes objets avec les méthodes magiques.
Les méthodes spéciales (dunder)
Les méthodes nommées __truc__ (double underscore) sont les méthodes
magiques : Python les appelle automatiquement dans certaines situations.
__init__ — constructeur (déjà vu)
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
__str__ — affichage pour humain
Appelée par print() et str() :
class Point:
def __init__(self, x, y):
self.x, self.y = x, y
def __str__(self):
return f"Point({self.x}, {self.y})"
p = Point(3, 4)
print(p) # Point(3, 4)
Sans __str__, on obtient un truc moche comme <__main__.Point object at 0x...>.
__repr__ — affichage technique
Utile pour le débogage. Si tu n'écris que __str__, alors repr(p) reste
laid. Bonne pratique : toujours écrire __repr__.
def __repr__(self):
return f"Point(x={self.x}, y={self.y})"
__eq__ — opérateur ==
class Point:
def __init__(self, x, y):
self.x, self.y = x, y
def __eq__(self, autre):
return self.x == autre.x and self.y == autre.y
print(Point(1, 2) == Point(1, 2)) # True
print(Point(1, 2) == Point(3, 4)) # False
__len__ — la fonction len()
class Equipe:
def __init__(self, membres):
self.membres = membres
def __len__(self):
return len(self.membres)
e = Equipe(["Zazac", "Lea", "Tom"])
print(len(e)) # 3
__add__ — opérateur +
class Vecteur:
def __init__(self, x, y):
self.x, self.y = x, y
def __add__(self, autre):
return Vecteur(self.x + autre.x, self.y + autre.y)
def __repr__(self):
return f"Vecteur({self.x}, {self.y})"
v = Vecteur(1, 2) + Vecteur(3, 4)
print(v) # Vecteur(4, 6)
Autres dunder utiles
| Méthode | Sert à… |
|---|---|
__lt__, __gt__ |
<, > (comparaisons) |
__getitem__(i) |
obj[i] |
__setitem__(i, v) |
obj[i] = v |
__contains__(x) |
x in obj |
__iter__ |
rendre l'objet itérable |
__call__ |
rendre l'objet appelable comme fonction |
class Pluriel:
def __call__(self, mot):
return mot + "s"
plus = Pluriel()
print(plus("chat")) # chats ← appelé comme une fonction !
💡 Les dunder sont la vraie magie de Python. C'est ce qui fait que tes objets s'intègrent naturellement avec
len,+,for, etc.
🧪 Quiz de validation
Réponds à toutes les questions. Il faut 70% de bonnes réponses pour valider le tuto !
🔒 Tu dois être connecté pour passer le quiz.