def __repr__(self):
return '<%s %s (%s:%s) %s>' % (
self.__class__.__name__, self.urlconf_name, self.app_name,
self.namespace, self.regex.pattern)
Quelle est la signification/le but de cette méthode ?
def __repr__(self):
return '<%s %s (%s:%s) %s>' % (
self.__class__.__name__, self.urlconf_name, self.app_name,
self.namespace, self.regex.pattern)
Quelle est la signification/le but de cette méthode ?
__repr__
devrait retourner une représentation imprimable de l'objet, le plus probablement un des manières possibles de créer cet objet. Voir la documentation officielle aquí . __repr__
est plutôt destiné aux développeurs, tandis que __str__
est destiné aux utilisateurs finaux.
Un exemple simple :
>>> class Point:
... def __init__(self, x, y):
... self.x, self.y = x, y
... def __repr__(self):
... return 'Point(x=%s, y=%s)' % (self.x, self.y)
>>> p = Point(1, 2)
>>> p
Point(x=1, y=2)
Paresseux1 : Je voulais principalement corriger le formatage (il est utile d'avoir des exemples qui correspondent le plus possible à ce qu'ils verront dans une session d'exemple), mais j'ai également modifié le format de sortie pour qu'il soit explicitement différent de l'affectation, car cela améliore grandement la clarté pour quelqu'un qui serait confus à ce sujet, imho. (Si je suis allé trop loin, il suffit de rééditer, et je vous devrai une bière).
Ceci est très bien expliqué dans le Documentation Python :
répression ( objet ) : Renvoie une chaîne de caractères contenant la représentation imprimable d'un objet. C'est la même valeur que celle obtenue par les conversions (guillemets inversés). Il est parfois utile de pouvoir accéder à cette opération comme une fonction ordinaire. Pour de nombreux types, cette fonction tente de retourner une chaîne de caractères qui donnerait un objet de même valeur lorsqu'elle est passée à la fonction
eval()
sinon, la représentation est une chaîne de caractères entre crochets qui contient le nom du type de l'objet ainsi que des informations supplémentaires, dont souvent le nom et l'adresse de l'objet. Une classe peut contrôler ce que cette fonction renvoie pour ses instances en définissant une fonction__repr__()
méthode.
Donc ce que vous voyez ici est l'implémentation par défaut de __repr__
qui est utile pour la sérialisation et le débogage.
Je pense que la méthode des guillemets inversés (ou 'backticks') pour obtenir la "représentation" d'un objet est dépréciée, et a été supprimée pour la version 3.0.
MatrixFrog : les deux sont vrais, mais la documentation actuelle de la 2.x le dit toujours, d'où la citation.
Pour de nombreux objets, __repr__ et __str__ sont la même fonction. En fait, si vous définissez uniquement __str__, alors __repr__ appelle par défaut __str__. Le cas le plus évident où cela n'est pas vrai est celui des chaînes de caractères elles-mêmes : str('stackoverflow') retourne stackoverflow
mais repr('stackoverflow') est 'stackoverflow'
.
__repr__
est utilisé par l'interpréteur Python autonome pour afficher une classe au format imprimable. Exemple :
~> python3.5
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> class StackOverflowDemo:
... def __init__(self):
... pass
... def __repr__(self):
... return '<StackOverflow demo object __repr__>'
...
>>> demo = StackOverflowDemo()
>>> demo
<StackOverflow demo object __repr__>
Dans les cas où un __str__
n'est pas définie dans la classe, elle appellera la méthode __repr__
dans le but de créer une représentation imprimable.
>>> str(demo)
'<StackOverflow demo object __repr__>'
En outre, print()
la classe appellera __str__
par défaut.
Documentation si vous voulez bien
Un exemple pour voir les différences entre eux (j'ai copié de cette source ),
>>> x=4
>>> repr(x)
'4'
>>> str(x)
'4'
>>> y='stringy'
>>> repr(y)
"'stringy'"
>>> str(y)
'stringy'
Les retours de repr()
y str()
sont identiques pour int x
mais il y a une différence entre les valeurs de retour de l'option str
y
-- l'un est officiel et l'autre est informel . L'une des différences les plus importantes entre les représentations formelles et informelles est que l'implémentation par défaut de la fonction __repr__
pour une valeur str peut être appelée comme argument de eval, et la valeur de retour sera un objet string valide, comme ceci :
>>> repr(y)
"'a string'"
>>> y2=eval(repr(y))
>>> y==y2
True
Si vous essayez d'appeler la valeur de retour de __str__
comme argument à eval, le résultat ne sera pas valide.
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.
4 votes
Duplicata possible de Différence entre __str__ et __repr__ en Python
4 votes
Pour les développeurs Java qui apprennent Python, la meilleure façon de voir cela est de considérer toString() en Java.