Une compréhension approfondie de __str__ et __repr__ en Python dans un article

PHPz
Libérer: 2023-04-10 14:51:10
avant
2177 Les gens l'ont consulté

Quelles sont les similitudes et les différences entre

__str__ et __repr__ ?

Représentation de chaînes

Nous savons tous que la fonction intégrée repr()​ de Python peut exprimer des objets sous forme de chaînes pour faciliter notre identification. Il s'agit de la "représentation sous forme de chaîne". repr()​ obtient la représentation sous forme de chaîne d'un objet via la méthode spéciale __repr__​. Si __repr__ n'est pas implémenté, lorsque nous imprimons une instance d'un vecteur sur la console, la chaîne résultante peut être .

>>> class Example: pass

>>> print(str(Example()))
<__main__.Example object at 0x10a514f98>
>>> print(repr(Example()))
<__main__.Example object at 0x1088eb438>
>>> 
>>> str(Example)
"<class '__main__.Example'>"
>>> repr(Example())
'<__main__.Example object at 0x1088eb438>'
Copier après la connexion

**__str__**​vs.**__repr__**

Ensuite, examinons les similitudes et les différences entre **__str__** et **__repr__**​. Selon la définition officielle de la documentation Python :

  • __str__​ : Appelé par str(object) et les fonctions intégrées format() et print() pour générer une représentation sous forme de chaîne "informelle" ou bien formatée d'un objet. La valeur de retour doit être un objet chaîne.
  • __repr__​ : Appelée par la fonction intégrée repr(), elle est utilisée pour afficher la représentation sous forme de chaîne "officielle" d'un objet. La valeur de retour doit être un objet chaîne. Cette méthode est généralement utilisée pour le débogage. L'implémentation par défaut définie pour l'objet de type intégré appelle object.__repr__().

Vous êtes confus entre les formats formels et informels, n'est-ce pas ? C'est bon, voyons voir :

1. Les deux peuvent générer des objets

>>> x = 4
>>> repr(x)
'4'
>>> str(x)
'4'
>>> y = 'pythonic'
>>> repr(y)
"'pythonic'"
>>> str(y)
'pythonic'

>>> z = '4'
>>> repr(z)
"'4'"
>>> str(z)# 注意,此处的输出结果形式跟str(x)一样,但x和z的类型并不一样
'4'
>>> str(x) == str(z)
True
>>> repr(x) == repr(z)
False
>>> str(4) == str("4")
True
>>> repr(4) == repr("4")
False
Copier après la connexion

Lorsque x=4, lorsque x est un type entier, les résultats de retour de l'appel de str()​ et repr() sont les mêmes,

Et lorsque y est un type chaîne, le résultat de repr(y)​ est une représentation sous forme de chaîne "formelle", tandis que le résultat de str(y)​ est "informel". str() nous permet de comprendre le contenu de l'objet le plus rapidement et est plus lisible.

2 .__str__​ est lisible et le but de __repr__ est clair

>>> import datetime
>>> d = datetime.datetime.now()
>>> str(d)
'2020-04-04 20:47:46.525245'
>>> repr(d)
'datetime.datetime(2020, 4, 4, 20, 47, 46, 525245)'
>>>
Copier après la connexion

On peut voir que repr() peut mieux afficher le type, la valeur et d'autres informations de l'objet, et la description de l'objet est claire.

Il est appelé lorsque la fonction str()​ est utilisée, ou lorsqu'un objet est imprimé à l'aide de la fonction d'impression, et la chaîne qu'elle renvoie est plus conviviale pour les utilisateurs finaux.

3. Réécrivez __repr__​, qui utilisera également __str_

class Student():

def __init__(self, name):
self.name = name

def __str__(self):
return "Name:" + self.name

def __repr__(self):
return "姓名:" + self.name


class_one = Student("Alice")
print(class_one)
print(str(class_one))
print(repr(class_one))
Copier après la connexion

Résultat de sortie :

Name:Alice
Name:Alice
姓名:Alice
Copier après la connexion

Résumé

Points communs : Ils sont tous utilisés pour générer un objet

Différence : Le but de

  1. __str__​ est Humain -lisible, __str__() ne devrait pas renvoyer une expression Python valide, mais une description plus pratique ou plus précise pourrait être utilisée. L'objectif de
  2. __repr__ est clair. La chaîne renvoyée doit être précise, sans ambiguïté et exprimer autant que possible comment créer l'objet imprimé à l'aide du code.
  3. L'utilisation de la méthode __str__​ du conteneur contient le __repr__​
de l'objet

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:51cto.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal