>>classExample:pass>>>print(str(Example()))>>>"/> >>classExample:pass>>>print(str(Example()))>>>">

Maison >développement back-end >Tutoriel Python >Quelles sont les similitudes et les différences entre __str__ et __repr__ en Python ?

Quelles sont les similitudes et les différences entre __str__ et __repr__ en Python ?

WBOY
WBOYavant
2023-04-29 19:58:051579parcourir

Quelles sont les similitudes et les différences entre __str__ et __repr__ ?

Représentation des chaînes

Nous savons tous que la fonction intégrée de Python repr() 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() utilise la méthode spéciale __repr__ pour obtenir la représentation sous forme de chaîne d'un objet. 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()))>>> print(repr(Example()))>>> 
>>> str(Example)
""
>>> repr(Example())
''

**__str__** contre **__repr__**

Ensuite, examinons les similitudes et les différences entre **__str__** et **__repr__**. Selon la documentation officielle de 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 formée d'un objet. La valeur de retour doit être un objet chaîne.

  • __repr__ : est appelé par la fonction intégrée repr() 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

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 quand y Lorsqu'il est de type chaîne, le résultat de repr(y) est la représentation sous forme de chaîne "formelle", tandis que le résultat de str(y) est la représentation "informelle". str() nous permet de comprendre le contenu de l'objet le plus rapidement et est plus lisible.

2.__str__ est lisible et l'objectif 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)'
>>>

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))

Résultat de sortie :

Name:Alice
Name:Alice
姓名:Alice

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer