Was ist der Unterschied zwischen __repr__ und __str__ in Python?


Antwort 1:

Auf prägnante Weise werde ich versuchen, zu erklären. _str_ und _repr_ sind beide für die Zeichenfolgendarstellung mit geringfügigem Unterschied. Mit repr (object technical details) können Sie die Funktion python eval () aufrufen, um den Python-Ausdruck auszuwerten. Dies ist jedoch nicht möglich.

>>> repr (4) == str (4)
Wahr
>>> repr ('simple hain ...') == str ('simple hain ...')
Falsch

Nun muss die Person die Ausgabe sehen, um dieses Verhalten zu verstehen

>>> s = 'simple hain ...'
>>> Repräsentant (en)
"'einfaches hain ...'"
>>> str (s)
"Einfaches Hain ..."
>>> str (4)
'4'
>>> Repr (4)
'4'

Verwenden der Python-Auswertungsfunktion zum Verstehen der _repr_ und _str_

>>> eval (repr ('simple hain ...'))
"Einfaches Hain ..."
>>> eval (str ('simple hain ...'))
Rückverfolgung (letzter Anruf zuletzt):
  Datei "", Zeile 1, in 
  Datei "", Zeile 1, in 
NameError: Der Name 'simple hain ...' ist nicht definiert

Wo soll diese Funktion verwendet werden? In Python wird _repr_ verwendet, um die Objektinformationen anzugeben, und _str_ wird zum Drucken oder Anzeigen verwendet.

  • Versuchen Sie, __repr__ für jede implementierte Klasse zu implementieren, um weitere technische Details zu object anzugeben. Versuchen Sie, __str__ für Klassen zu implementieren, die Ihrer Meinung nach besser lesbar sind

Ich habe dieses Beispiel im Netz gefunden

>>> aus datetime importieren datetime
>>> now = datetime.now ()
>>> repr (jetzt)
"datetime.datetime (2013, 2, 5, 4, 43, 11, 673075)"
>>> str (jetzt)
'2013-02-05 04: 43: 11.673075'

Ich hoffe du verstehst das.


Antwort 2:

Für "__repr__" sollte dies nach Möglichkeit wie ein gültiger Python-Ausdruck aussehen, mit dem ein Objekt mit demselben Wert (in einer geeigneten Umgebung) neu erstellt werden kann. Ist dies nicht möglich, muss ein String der Form <.. Eine nützliche Beschreibung ...> sollte zurückgegeben werden. "

Konkret wäre also __str__ für eine Zeichenfolge "xyzzy" die Zeichenfolge: xyzzy

während __repr__ für einen String der String wäre: 'xyzzy'


Antwort 3:

Für "__repr__" sollte dies nach Möglichkeit wie ein gültiger Python-Ausdruck aussehen, mit dem ein Objekt mit demselben Wert (in einer geeigneten Umgebung) neu erstellt werden kann. Ist dies nicht möglich, muss ein String der Form <.. Eine nützliche Beschreibung ...> sollte zurückgegeben werden. "

Konkret wäre also __str__ für eine Zeichenfolge "xyzzy" die Zeichenfolge: xyzzy

während __repr__ für einen String der String wäre: 'xyzzy'