Renforcer les réponses précédentes et montrer d'autres exemples. Si elle est utilisée correctement, la différence entre str
y repr
est claire. En bref repr
doit renvoyer une chaîne de caractères qui peut être copiée-collée pour reconstruire l'état exact de l'objet, alors que str
est utile pour logging
y observing
les résultats du débogage. Voici quelques exemples de résultats différents pour des bibliothèques connues.
Date
print repr(datetime.now()) #datetime.datetime(2017, 12, 12, 18, 49, 27, 134411)
print str(datetime.now()) #2017-12-12 18:49:27.134452
Les str
est bon pour l'impression dans un fichier journal, alors que repr
peut être réutilisé si vous souhaitez l'exécuter directement ou le transférer sous forme de commandes dans un fichier.
x = datetime.datetime(2017, 12, 12, 18, 49, 27, 134411)
Numpy
print repr(np.array([1,2,3,4,5])) #array([1, 2, 3, 4, 5])
print str(np.array([1,2,3,4,5])) #[1 2 3 4 5]
dans Numpy, le repr
est à nouveau directement consommable.
Exemple de Vector3 personnalisé
class Vector3(object):
def __init__(self, args):
self.x = args[0]
self.y = args[1]
self.z = args[2]
def __str__(self):
return "x: {0}, y: {1}, z: {2}".format(self.x, self.y, self.z)
def __repr__(self):
return "Vector3([{0},{1},{2}])".format(self.x, self.y, self.z)
Dans cet exemple, repr
renvoie à nouveau une chaîne de caractères qui peut être directement consommée/exécutée, alors que str
est plus utile comme sortie de débogage.
v = Vector3([1,2,3])
print str(v) #x: 1, y: 2, z: 3
print repr(v) #Vector3([1,2,3])
Une chose à garder à l'esprit, si str
n'est pas défini mais repr
, str
appellera automatiquement repr
. Il est donc toujours bon de définir au moins ce qui suit repr
9 votes
stackoverflow.com/questions/1436703/
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__ ?