les méthodes magiques

En Python, les fonctions magiques, comme __str__, sont appelées méthodes spéciales ou méthodes magiques (en anglais, "special methods" ou "magic methods").

Ces méthodes sont définies avec un double underscore (aussi appelé "dunder" pour "double underscore") au début et à la fin de leur nom, par exemple __init__, __str__, ou __len__.

Rôle des méthodes spéciales

Les méthodes spéciales permettent d'ajouter des comportements particuliers aux objets. Elles sont automatiquement appelées dans des contextes spécifiques, notamment pour surcharger des opérateurs ou personnaliser le comportement d'une classe.


Quelques exemples courants de méthodes spéciales

Méthode spéciale Usage
__init__(self, ...) Méthode d'initialisation appelée lors de la création d'une instance (constructeur).
__str__(self) Retourne une représentation en chaîne de caractères de l'objet (utilisée avec print).
__repr__(self) Retourne une représentation officielle de l'objet (utilisée pour le débogage).
__len__(self) Définit la réponse à len(obj) pour l'objet.
__getitem__(self, i) Permet de rendre l'objet indexable (obj[i]).
__setitem__(self, i, val) Permet de modifier un élément via un index (obj[i] = val).
__call__(self, ...) Rend un objet "appelable" comme une fonction (obj()).
__eq__(self, other) Définit le comportement de l'opérateur ==.
__add__(self, other) Définit le comportement de l'opérateur +.

Exemple d'utilisation : __str__ vs __repr__

class Personne:
    def __init__(self, nom, age):
        self.nom = nom
        self.age = age

    def __str__(self):
        return f"{self.nom}, {self.age} ans"

    def __repr__(self):
        return f"Personne(nom='{self.nom}', age={self.age})"

# Exemple
p = Personne("Alice", 30)

print(p)  # Appelle __str__ -> "Alice, 30 ans"
print(repr(p))  # Appelle __repr__ -> "Personne(nom='Alice', age=30)"

Points clés

  • Double underscore : Toutes les méthodes spéciales ont des noms entourés de __.
  • Automatisation : Ces méthodes sont appelées automatiquement dans des contextes appropriés.
  • Surcharge : Elles permettent de personnaliser le comportement d'une classe pour le rendre plus intuitif ou adapté.