Ein umfassendes Verständnis von __str__ und __repr__ in Python in einem Artikel

PHPz
Freigeben: 2023-04-10 14:51:10
nach vorne
2189 Leute haben es durchsucht

Was sind die Gemeinsamkeiten und Unterschiede zwischen __str__ und __repr__?

Darstellung von Strings

Wir alle wissen, dass Pythons integrierte Funktion repr()​ Objekte in Form von Strings ausdrücken kann, um uns die Identifizierung zu erleichtern. Dies ist die „String-Darstellung“. repr()​ erhält die String-Darstellung eines Objekts über die spezielle Methode __repr__​. Wenn __repr__ nicht implementiert ist und wir eine Instanz eines Vektors auf der Konsole ausgeben, lautet die resultierende Zeichenfolge möglicherweise .

>>> 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>'
Nach dem Login kopieren

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

Als nächstes werfen wir einen Blick auf die Ähnlichkeiten und Unterschiede zwischen **__str__** und **__repr__**​. Gemäß der offiziellen Definition der Python-Dokumentation:

  • __str__​: Wird von str(object) und den integrierten Funktionen format() und print() aufgerufen, um eine „informelle“ oder gut formatierte Zeichenfolgendarstellung eines Objekts zu generieren. Der Rückgabewert muss ein String-Objekt sein.
  • __repr__​: Wird von der integrierten Funktion repr() aufgerufen und dient zur Ausgabe der „offiziellen“ Zeichenfolgendarstellung eines Objekts. Der Rückgabewert muss ein String-Objekt sein. Diese Methode wird normalerweise zum Debuggen verwendet. Die für das integrierte Typobjekt definierte Standardimplementierung ruft object.__repr__() auf.

Du bist schon verwirrt, was formelle und informelle Formate angeht, oder? Es ist in Ordnung, schauen wir uns weiter an:

1. Beide können Objekte ausgeben

>>> 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
Nach dem Login kopieren

Wenn x=4, wenn x ein ganzzahliger Typ ist, sind die Rückgabeergebnisse des Aufrufs von str()​ und repr() gleich,

Und wenn y ein String-Typ ist, ist das Ergebnis von repr(y)​ eine „formelle“ String-Darstellung, während das Ergebnis von str(y)​ „informell“ ist. str() ermöglicht es uns, den Inhalt des Objekts am schnellsten zu verstehen und ist besser lesbar.

2 .__str__​ ist lesbar und das Ziel von __repr__ ist klar

>>> 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)'
>>>
Nach dem Login kopieren

Es ​​ist ersichtlich, dass repr() den Typ, den Wert und andere Informationen des Objekts besser anzeigen kann und die Objektbeschreibung klar ist.

Es wird aufgerufen, wenn die Funktion str()​ verwendet wird oder wenn ein Objekt mit der Druckfunktion gedruckt wird, und die zurückgegebene Zeichenfolge ist für Endbenutzer benutzerfreundlicher.

3. Schreiben Sie __repr__ um, wobei auch __str_ verwendet wird.

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))
Nach dem Login kopieren
-lesbar, es wird nicht erwartet, dass __str__() einen gültigen Python-Ausdruck zurückgibt, es könnte jedoch eine bequemere oder genauere Beschreibung verwendet werden. Das Ziel von

__repr__ ist klar. Die zurückgegebene Zeichenfolge sollte genau und eindeutig sein und so viel wie möglich ausdrücken, wie das gedruckte Objekt mithilfe von Code erstellt wird.

Die Verwendung der __str__​-Methode des Containers enthält den __repr__

des Objekts

Das obige ist der detaillierte Inhalt vonEin umfassendes Verständnis von __str__ und __repr__ in Python in einem Artikel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:51cto.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage