Looking for python Keywords? Try Ask4Keywords

Python LanguageReprésentations de chaîne des instances de classe: méthodes __str__ et __repr__


Remarques

Une note sur l'implémentation des deux méthodes

Lorsque les deux méthodes sont implémentées, il est assez courant d'avoir une méthode __str__ qui retourne une représentation conviviale (par exemple, "Ace of Spaces") et __repr__ renvoie une représentation eval friendlyly.

En fait, les documents Python pour repr() notent exactement ceci:

Pour de nombreux types, cette fonction tente de renvoyer une chaîne qui donnerait un objet ayant la même valeur lorsqu'elle est transmise à eval (), sinon la représentation est une chaîne entre crochets contenant le nom du type de l'objet. avec des informations supplémentaires comprenant souvent le nom et l'adresse de l'objet.

Cela signifie que __str__ pourrait être implémenté pour renvoyer quelque chose comme "As of Spaces" comme indiqué précédemment, __repr__ pourrait être implémenté pour renvoyer à la place Card('Spades', 1)

Cette chaîne pourrait être renvoyée directement dans eval en un peu comme un "aller-retour":

object -> string -> object

Un exemple d'implémentation d'une telle méthode pourrait être:

def __repr__(self):
    return "Card(%s, %d)" % (self.suit, self.pips)

Remarques

[1] Cette sortie est spécifique à l'implémentation. La chaîne affichée provient de cpython.

[2] Vous avez peut-être déjà vu le résultat de cette division str() / repr() sans le savoir. Lorsque des chaînes contenant des caractères spéciaux, tels que des barres obliques inverses, sont converties en chaînes via str() les barres obliques inverses apparaissent telles quelles (elles apparaissent une fois). Lorsqu'elles sont converties en chaînes via repr() (par exemple, lorsque des éléments d'une liste sont affichés), les barres obliques inversées sont échappées et apparaissent donc deux fois.

Représentations de chaîne des instances de classe: méthodes __str__ et __repr__ Exemples Liés