Ich lerne die Seile in Python. Wenn ich versuche, ein Klassenobjekt Foobar
mit der print()
Funktion zu drucken , erhalte ich eine Ausgabe wie folgt:
<__main__.Foobar instance at 0x7ff2a18c>
Gibt es eine Möglichkeit, das Druckverhalten (oder die Zeichenfolgendarstellung ) einer Klasse und ihrer Objekte festzulegen ? Wenn ich beispielsweise print()
ein Klassenobjekt aufrufe, möchte ich seine Datenelemente in einem bestimmten Format drucken. Wie erreicht man das in Python?
Wenn Sie mit C ++ - Klassen vertraut sind, können Sie dies für den Standard erreichen, ostream
indem Sie eine friend ostream& operator << (ostream&, const Foobar&)
Methode für die Klasse hinzufügen .
Wie Chris Lutz erwähnte , wird dies durch die
__repr__
Methode in Ihrer Klasse definiert.Aus der Dokumentation von
repr()
:Bei folgendem Klassentest:
..es wird sich in der Python-Shell folgendermaßen verhalten:
Wenn keine
__str__
Methode definiert ist, verwendetprint(t)
(oderprint(str(t))
)__repr__
stattdessen das Ergebnis vonWenn keine
__repr__
Methode definiert ist, wird der Standardwert verwendet, der ziemlich genau dem entspricht.quelle
__str__
unterscheidet sich von den Ergebnissen der interaktiven Shell, die Sie angeben. : P%
String - Formatierung wird nicht mehr unterstützt, von docs.python.org/whatsnew/2.6.html „der Operator% wird ergänzt durch eine leistungsfähigere String Formatierung Methode, Format ()“%
war sehr praktisch.Eine generische Methode, die ohne spezifische Formatierung auf jede Klasse angewendet werden kann, kann wie folgt erfolgen:
Und dann,
produziert
quelle
Wenn Sie sich in einer Situation wie @Keith befinden, können Sie Folgendes versuchen:
Es widerspricht dem, was ich für guten Stil halte, aber wenn Sie nur versuchen zu debuggen, sollte es tun, was Sie wollen.
quelle
Um meine zwei Cent zu @ dbrs Antwort hinzuzufügen, folgt ein Beispiel für die Implementierung dieses Satzes aus der offiziellen Dokumentation, die er zitiert hat:
Angesichts dieser Klassendefinition:
Jetzt ist es einfach, Instanz der
Test
Klasse zu serialisieren :Wenn wir also den letzten Code ausführen, erhalten wir:
Aber wie gesagt in meinem letzten Kommentar: Mehr Infos gibt es einfach hier !
quelle
Sie müssen verwenden
__repr__
. Dies ist eine Standardfunktion wie__init__
. Zum Beispiel:quelle
Eine schönere Version der Antwort von @ user394430
Erzeugt eine visuell schöne Liste der Namen und Werte.
Eine noch schickere Version (danke Ruud) sortiert die Artikel:
quelle
Für Python 3:
Wenn das spezifische Format nicht wichtig ist (z. B. zum Debuggen), erben Sie einfach von der unten stehenden Printable-Klasse. Sie müssen nicht für jedes Objekt Code schreiben.
Inspiriert von dieser Antwort
quelle
Es gibt bereits viele Antworten in diesem Thread, aber keine davon hat mir besonders geholfen. Ich musste es selbst herausfinden, also hoffe ich, dass diese etwas informativer ist.
Sie müssen nur sicherstellen, dass Sie am Ende Ihrer Klasse Klammern haben, z.
Hier ist ein Beispiel für Code aus einem Projekt, an dem ich gearbeitet habe:
Um meine Wasserstoffklasse zu drucken, habe ich Folgendes verwendet:
Bitte beachten Sie, dass dies ohne die Klammern am Ende von Wasserstoff nicht funktioniert. Sie sind notwendig.
Hoffe das hilft, lass es mich wissen, wenn du noch Fragen hast.
quelle