Was ist der Unterschied zwischen __str__(self) und __repr__(self)?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

__str__ erzeugt einen String, der das Objekt beschreibt und z.B. für Ausgabezwecke genutzt werden kann. Ein für den Menschen gut lesbare Darstellung.

__repr__ erzeugt einen string, der das Object möglichst gut repräsentiert und darstellt, wie das Objekt wieder erzeugt werden kann.

Das ist grob der Unterschied, die Dokumentation erklärt das ausführlicher..

Wir können das aber mal an einem Beispiel darlegen. Nehmen wir an, Du machst eine Klasse Mensch mit Verschiedenen Attributen.

Dann könnte __str__() sowas wie 'Vorname: <first>, Name: <last>, ...' zurückliefern, wobei <first> der Wert des Attributes first sein soll.

Bei __repr__ würdest Du 'Mensch(<first>,<last>,....) ausgeben, sodaß ein eval() des Strings zur Reinstanziierung des Objektes führen würde.

Die Doku sagt zu __str__:

This method differs from object.__repr__() in that there is no expectation that __str__() return a valid Python expression: a more convenient or concise representation can be used.

Ruhrpotter4324 
Fragesteller
 29.09.2021, 16:56

Vielen Dank, also habe ich quasi das gleiche Ergebnis bekommen, weil ich __str__ einfach nur durch __repr__ ersetzt habe, ohne sonstige Anpassungen vorzunehmen. War nur ein Test, was für eine Fehlermeldung ich kriege, aber das Ergebnis war ohne Fehlermeldung gleichbleibend, was mich verwundert hat.

Ich muss mir die Dokumentation dazu mal ansehen, die gibt es leider nicht auf Deutsch 😅 Danke schön!

0
KarlRanseierIII  29.09.2021, 17:02
@Ruhrpotter4324

Die Standardimplementierung von __str__ ruft __repr__ auf. Sobald also __repr__ vorhanden ist, liefet __str__ automatisch das gleiche, es sei denn, man legt für __str__ etwas anderes fest.

1