Leçon 1 / 9 — Chapitre 3: POO : méthodes spéciales, propriétés et dataclasses
__str__ : personnaliser l'affichage d'un objet
Par défaut, print() sur un objet affiche un texte peu lisible comme <__main__.Produit object at 0x...>. La méthode spéciale __str__ permet de définir un affichage clair, utilisé automatiquement par print() et str().
class Produit:
def __init__(self, nom, prix):
self.nom = nom
self.prix = prix
def __str__(self):
return f"{self.nom} ({self.prix} $)"
riz = Produit("riz", 5)
print(riz)
Ce code affiche riz (5 $) : print(riz) appelle automatiquement riz.__str__() en interne, sans qu'on ait besoin d'appeler cette méthode explicitement — c'est ce qui différencie une méthode spéciale (entourée de doubles underscores) d'une méthode normale.
str(riz) produit exactement le même résultat, puisque str() appelle aussi __str__ en interne :
print(str(riz))
Sans __str__ défini, print(riz) afficherait l'adresse mémoire de l'objet, peu utile pour comprendre ce qu'il contient — __str__ rend cet affichage réellement exploitable, pour du débogage ou pour un utilisateur final.
À vous de jouer : ajoutez une méthode __str__ à une classe de votre choix, qui affiche un résumé lisible de ses attributs, puis testez print() sur un objet.
À vous de jouer
À faireQue va afficher ce code ?
class Produit:
def __init__(self, nom):
self.nom = nom
def __str__(self):
return f"Produit : {self.nom}"
p = Produit("sucre")
print(p)
Copiez ce code dans un environnement Python en ligne (Google Colab, Replit, ou tout autre) pour vérifier le résultat avant de répondre.
À vous de jouer
À faireQue se passe-t-il si une classe n'a pas de méthode str définie ?
Copiez ce code dans un environnement Python en ligne (Google Colab, Replit, ou tout autre) pour vérifier le résultat avant de répondre.
💡 une courte réponse