77 votes

Python object.__repr__(self) devrait être une expression ?

J'ai regardé les méthodes d'objets intégrés dans la bibliothèque de l'UE. Documentation Python et j'étais intéressé par la documentation de object.__repr__(self) . Voici ce qu'il dit :

Appelé par la fonction intégrée repr() et par les conversions de chaînes (guillemets inversés guillemets inversés) pour calculer la représentation d'un objet. Si possible, cela devrait ressembler à une expression Python valide qui pourrait être utilisée pour recréer un objet avec la même valeur (avec un environnement environnement approprié). Si cela n'est pas possible une chaîne de la forme <...une description utile... description...> devrait être retournée. La valeur de retour doit être une chaîne de caractères objet. Si une classe définit répression () mais pas str (), alors répression () est également utilisé lorsqu'une chaîne de caractères "informelle des instances de cette classe est nécessaire.

Cette fonction est généralement utilisée pour le débogage, Il est donc important que la représentation soit riche en informations et sans ambiguïté

La partie la plus intéressante pour moi, était...

Dans la mesure du possible, cela devrait ressembler à une expression Python valide qui pourrait être utilisée pour recréer un objet avec la même valeur.

... mais je ne suis pas sûr de ce que cela signifie exactement. Il est dit qu'il faut regardez comme une expression qui peut être utilisée pour recréer l'objet, mais est-ce que cela signifie qu'il devrait juste être un exemple du genre d'expression que vous pourriez utiliser, ou devrait-il être une expression réelle, qui peut être exécutée (eval etc..) pour recréer l'objet ? Ou... doit-il s'agir d'une simple reformulation de l'expression réelle utilisée, à des fins purement informatives ?

En général, je ne sais pas exactement ce que je dois mettre ici.

25 votes

Cette question est liée aux notes de cours officielles sur le site du MIT. 6.00.1x : Introduction à l'informatique .

3voto

Saeed Ahmed Points 21

Pour voir comment le repr fonctionne dans une classe, exécutez le code suivant, d'abord avec, puis sans le repr. répression méthode.

class Coordinate (object):
    def __init__(self,x,y):
        self.x = x
        self.y = y

    def getX(self):
        # Getter method for a Coordinate object's x coordinate.
        # Getter methods are better practice than just accessing an attribute directly
        return self.x
    def getY(self):

        # Getter method for a Coordinate object's y coordinate
        return self.y

    def __repr__(self):  #remove this and the next line and re-run
        return 'Coordinate(' + str(self.getX()) + ',' + str(self.getY()) + ')' 

>>>c = Coordinate(2,-8)
>>>print(c)

0voto

sle7en Points 39

Je pense que la confusion ici vient de l'anglais. Je veux dire __repr__() ; abréviation de "représentation" de la valeur, je suppose, comme l'a dit @S.Lott.

" Quelle est la différence entre " une expression réelle, qui peut ... recréer l'objet " et " une remise en forme de l'expression réelle qui a été utilisée [pour créer l'objet] " ? Les deux sont une expression qui crée l'objet. Il n'y a pas de distinction pratique entre les deux. Un appel repr peut produire soit une nouvelle expression, soit l'expression originale. Dans de nombreux cas, c'est la même chose."

Mais dans certains cas, ils peuvent être différents. Par exemple, pour des points de coordonnées, vous pouvez vouloir c.coordinate pour revenir : 3,5 mais c.__repr__ pour revenir Coordinate(3, 5) . J'espère que cela a plus de sens...

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