Comment modifier la représentation en chaîne de caractères d’un objets en Python

Vous voulez changer la sortie produite par l’impression ou l’affichage d’instances de classe. Pour changer la représentation en chaînes de caractères d’un objet, définissez les méthodes __str__() et __repr__(). Par exemple :

class Paire:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __repr__(self):
        return 'Paire ({0.x!r}, {0.y!r})'.format(self)
    def __str__(self):
        return '({0.x!s}, {0.y!s})'.format(self)

La méthode __repr__() renvoie la représentation du code d’une instance, et c’est généralement le texte que vous tapez pour recréer l’instance. La fonction intégrée repr() renvoie ce texte.

La méthode __str__() convertit l’instance en une chaîne de caractères, et est la sortie produite par les fonctions str() et print(). Par exemple:

>>> p = Paire(3, 4)
>>> p
Paire(3, 4)         # sortie de  __repr__()
>>> print(p)
(3, 4)             # sortie de  __str__() 
>>>

L’implémentation de ce code montre également comment différentes représentations en chaînes de caractères peuvent être utilisées pendant le formatage.

Plus précisément, le code de formatage spécial !r indique que la sortie de __repr__() doit être utilisée à la place de __str__()- la valeur par défaut. Vous pouvez essayer ce test avec la classe précédente pour voir ceci:

>>> p = Paire(3, 4)
>>> print('p es {0!r}'.format(p))
p est Paire(3, 4)
>>> print('p est {0}'.format(p))
p est (3, 4)
>>>

Définir __repr__() et __str__() est souvent une bonne pratique, car cela peut simplifier le débogage et l’affichage des instances. Par exemple, en imprimant ou en enregistrant simplement une instance, un programmeur obtiendra des informations plus utiles sur le contenu de l’instance.

C’est une pratique standard pour la sortie de __repr__() de produire un texte tel que eval(repr(x)) == x. Si ce n’est pas possible ou désiré, alors il est courant de créer une représentation textuelle utile incluse entre < et > à la place. Par exemple:

>>> f = open('fichier.dat')
>>> f
<_io.TextIOWrapper name='fichier.dat' mode='r' encoding='UTF-8'>
>>>

Si aucune méthode __str__() n’est défini, la sortie de __repr__() est utilisée comme repli.

L’utilisation de format() dans la solution peut sembler un peu drôle, mais le code de format {0.x} spécifie l’attribut x de l’argument 0. Ainsi, dans la fonction suivante, le 0 est en fait l’instance self:

def __repr__(self):
    return 'Paire({0.x!r}, {0.y!r})'.format(self)

Comme alternative à cette implémentation, vous pouvez également utiliser l’opérateur % et le code suivant:

def __repr__(self):
    return 'Paire(%r, %r)' % (self.x, self.y)

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here