Heim >Backend-Entwicklung >Python-Tutorial >Ein umfassendes Verständnis von __str__ und __repr__ in Python in einem Artikel

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

PHPz
PHPznach vorne
2023-04-10 14:51:102193Durchsuche

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

**__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

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

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

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen