Détails
Différence entre __str__ et __repr__ ?
Quelle est la différence entre __str__
et __repr__
en Python ?
2527
3
Quelle est la différence entre __str__
et __repr__
en Python ?
À moins que vous n'agissiez spécifiquement pour qu'il en soit autrement, la plupart des cours n'ont pas de résultats utiles pour l'un ou l'autre :
Comme vous le voyez -- aucune différence, et aucune information au-delà de la classe et du
id
de l'objet. Si vous ne surchargez qu'un seul des deux... :comme vous le voyez, si vous surchargez
__repr__
, cela est AUSSI utilisé pour__str__
, mais pas vice versa.Autres informations cruciales à connaître :
__str__
sur un conteneur construit utilise le__repr__
, PAS le__str__
, pour les éléments qu'il contient. Et, malgré tout ce que l'on peut lire sur le sujet dans la documentation, personne ne se soucie de faire en sorte que la__repr__
des objets soit une chaîne de caractères queeval
peut utiliser pour construire un objet équivalent (c'est trop difficile, et ne pas savoir comment le module concerné a été importé rend la chose carrément impossible).Donc, mon conseil : concentrez-vous à rendre
__str__
raisonnablement lisible par l'homme, et__repr__
aussi peu ambiguë que possible, même si cela interfère avec le but vaguement inaccessible de rendre la valeur retournée par__repr__
acceptable comme entrée pour__eval__
!__repr__
: représentation d'un objet python ; généralement, eval le reconvertira en cet objet.__str__
: est ce que vous pensez être cet objet sous forme de textePar exemple
Tiré de [an (An Unofficial) Python Reference Wiki (archive copy)][1] par effbot :
__str__
"compute la représentation "informelle" en chaîne de caractères d'un objet. Cela diffère de__repr__
en ce qu'il n'est pas nécessaire que ce soit une expression Python valide : une représentation plus pratique ou plus concise peut être utilisée à la place."[1] : https://web.archive.org/web/20071127054034/http://pyref.infogami.com/__str__