À quoi sert __repr__ ?
La méthode spéciale __repr__
permet d'indiquer une chaîne de caractères qui sert de représentation à une classe.
Cette chaîne de caractères est retournée lors de l'utilisation de la fonction repr
sur une instance de la classe.
import datetime now = datetime.datetime.now() print(repr(now))
La chaîne de caractères retournée est destinée aux développeurs et sa représentation permet généralement de recréer l'objet en question.
Par exemple, le code ci-dessus nous retourne la chaîne de caractères "datetime.datetime(2021, 1, 13, 10, 24, 45, 116735)"
que nous pouvons utiliser pour recréer l'objet now
:
import datetime now = datetime.datetime(2021, 1, 13, 10, 24, 45, 116735) print(now)
Pour implémenter cette méthode, il suffit de la surcharger à l'intérieur d'une classe :
class Utilisateur: def __init__(self, prenom, nom): self.prenom = prenom self.nom = nom def __repr__(self): return "Utilisateur(prenom='{}', nom='{}')".format(self.prenom, self.nom) utilisateur_01 = Utilisateur(prenom="Patrick", nom="Smith") print(repr(utilisateur_01))
Là encore, nous pouvons prendre le résultat retourné par repr (Utilisateur(prenom='Patrick', nom='Smith'))
pour recréer l'objet correspondant.
Si vous n'implémentez pas cette méthode dans votre classe, la méthode __repr__
de l'objet object
(dont toutes les classes héritent par défaut) sera utilisée.
Par défaut, la classe (__main__.Utilisateur
) et l'adresse en mémoire de l'instance (0x10f5952e0
) sont affichées :
# On n'implémente pas la méthode __repr__ class Utilisateur: def __init__(self, prenom, nom): self.prenom = prenom self.nom = nom utilisateur_01 = Utilisateur(prenom="Patrick", nom="Smith") # Quand on utilise repr sur notre instance, la classe et l'adresse en mémoire de l'instance sont affichées print(repr(utilisateur_01)) # <__main__.Utilisateur object at 0x10f5952e0> # Cette implémentation provient de la classe object print(object.__repr__(utilisateur_01)) # <__main__.Utilisateur object at 0x10f5952e0>
Si vous exécutez le code ci-dessus, l'adresse en mémoire n'est pas affichée car le code est exécuté dans votre navigateur internet)