94 votes

Quel est le but de __str__ et de __repr__ ?

Je ne comprends vraiment pas où sont les __str__ y __repr__ utilisé dans Python. Je veux dire que je comprends que __str__ renvoie la représentation sous forme de chaîne de caractères d'un objet. Mais pourquoi en aurais-je besoin ? Dans quel cas d'utilisation ? Par ailleurs, j'ai lu que l'utilisation de __repr__

Mais ce que je ne comprends pas, c'est où les utiliser ?

9 votes

5 votes

Pour ceux qui viennent de Ruby, le résumé est le suivant : __str__ = to_s y __repr__ = inspect .

3 votes

Cela répond-il à votre question ? Différence entre __str__ et __repr__ ?

3voto

Vishvajit Pathak Points 948

str sera un format informel et lisible, tandis que repr donnera une représentation officielle de l'objet.

class Complex:
    # Constructor
    def __init__(self, real, imag):
        self.real = real
        self.imag = imag

    # "official" string representation of an object
    def __repr__(self):
        return 'Rational(%s, %s)' % (self.real, self.imag)

    # "informal" string representation of an object (readable)
    def __str__(self):
        return '%s + i%s' % (self.real, self.imag)

    t = Complex(10, 20)

    print (t)     # this is usual way we print the object
    print (str(t))  # this is str representation of object 
    print (repr(t))  # this is repr representation of object   

Answers : 

Rational(10, 20) # usual representation
10 + i20      # str representation
Rational(10, 20)  # repr representation

1voto

KingWitherBrine Points 90

str y réprimer sont deux façons de représenter. Vous pouvez les utiliser lorsque vous rédigez un cours.

class Fraction:
def __init__(self, n, d):
    self.n = n
    self.d = d
def __repr__(self):
    return "{}/{}".format(self.n, self.d)

par exemple, lorsque j'imprime une instance de celui-ci, il renvoie des choses.

print(Fraction(1, 2))

se traduit par

1/2

alors que

class Fraction:
def __init__(self, n, d):
    self.n = n
    self.d = d
def __str__(self):
    return "{}/{}".format(self.n, self.d)
print(Fraction(1, 2))

se traduit également par

1/2

Mais si vous écrivez les deux, lequel des deux est utilisé par Python ?

class Fraction:
def __init__(self, n, d):
    self.n = n
    self.d = d
def __str__(self):
    return "str"
def __repr__(self):
    return "repr"

print(Fraction(None, None))

Il en résulte

str

Ainsi, python utilise en fait l'option str et non la méthode réprimer lorsque les deux sont rédigés.

0voto

xiaoou wang Points 13

Supposons que vous ayez une classe et que vous souhaitiez inspecter une instance, vous voyez que l'impression ne donne pas beaucoup d'informations utiles.

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

p1 = Person("John", 36)
print(p1)  # <__main__.Animal object at 0x7f9060250410>

Voyons maintenant une classe avec un str Il affiche les informations relatives à l'instance et avec réprimer vous n'avez même pas besoin de l'impression. Sympathique, non ?

class Animal:
    def __init__(self, color, age, breed):
        self.color = color
        self.age = age
        self.breed = breed

    def __str__(self):
        return f"{self.color} {self.breed} of age {self.age}"

    def __repr__(self):
        return f"repr : {self.color} {self.breed} of age {self.age}"

a1 = Animal("Red", 36, "Dog")
a1  # repr : Red Dog of age 36
print(a1)  # Red Dog of age 36

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X