So drucken Sie Instanzen einer Klasse mit print()?
Ich bin erlernen der Seile in Python. Wenn ich versuche, drucken ein Objekt der Klasse Foobar
mit der print()
Funktion, bekomme ich eine Ausgabe wie diese:
<__main__.Foobar instance at 0x7ff2a18c>
Gibt es eine Möglichkeit, ich kann die Druck Verhalten (oder die string-Darstellung) eines Klasse und seine Objekte? Wenn ich zum Beispiel call print()
auf ein class-Objekt, ich möchte zum ausgeben der Daten, die Mitglieder in einem bestimmten format. Wie das zu erreichen ist in Python?
Wenn Sie vertraut sind mit C++ - Klassen, die oben erreicht werden kann, für die standard - ostream
durch hinzufügen einer friend ostream& operator << (ostream&, const Foobar&)
- Methode für die Klasse.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
__str__
Methode ist, was passiert, wenn Sie es drucken, und die__repr__
Methode ist, was passiert, wenn Sie dierepr()
Funktion (oder, wenn man es mit der interaktive Eingabeaufforderung). Wenn dies nicht das Pythonic Methode, ich entschuldige mich, weil ich noch zu lernen - aber es funktioniert.Wenn keine
__str__
Methode ist gegeben, Python druckt das Ergebnis__repr__
statt. Wenn Sie definieren__str__
aber nicht__repr__
, Python verwenden, was Sie oben sehen, wie die__repr__
, aber immer noch verwenden__str__
für den Druck.Als Chris Lutz erwähnt, dieses ist definiert durch die
__repr__
Methode in Ihrer Klasse.Aus der Dokumentation der
repr()
:Gegeben folgende Klasse Test:
..es handeln wird die folgende Art, in der Python-shell:
Wenn keine
__str__
Methode definiert ist, wirdprint(t)
(oderprint(str(t))
) wird das Ergebnis der__repr__
stattWenn keine
__repr__
Methode definiert ist, dann wird der Standardwert verwendet, das ist so ziemlich gleichwertig..__str__
unterscheidet sich von der interaktiven shell die Ergebnisse, die Sie geben. 😛%
string-Formatierung ist nicht veraltet, aus docs.python.org/whatsnew/2.6.html "der % - operator ist ergänzt durch eine leistungsfähige string-Formatierung Methode format()"%
's schon sehr praktisch.print([Test(123)])
Einer generischen Art und Weise, die angewendet werden können, um jede Klasse ohne spezielle Formatierung getan werden könnte, wie folgt:
Dann,
produziert
Nur meine zwei Cent hinzu zu @dbr Antwort, Folgendes ist ein Beispiel, wie die Umsetzung dieser Satz aus der offiziellen Dokumentation, die er zitiert:
Diese Klasse definition:
Nun, ist leicht zu serialisieren Instanz
Test
Klasse:So, läuft letzten Stück code, erhalten wir:
Aber, wie ich schon in meinem letzten Kommentar: mehr info ist nur hier!
Müssen Sie
__repr__
. Dies ist eine standard-Funktion wie__init__
.Zum Beispiel:
Wenn Sie in einer situation wie @Keith, die Sie könnten versuchen:
Geht es gegen das, was ich hielte guter Stil, aber wenn Sie nur versuchen zu Debuggen, dann sollte es das tun, was Sie wollen.
Für Python 3:
Wenn das format nicht wichtig ist (z.B. für debugging) nur Erben von der Druckbare Klasse unten. Keine Notwendigkeit, code zu schreiben, für jedes Objekt.
Inspiriert von diese Antwort
Eine schönere version der Antwort von @user394430
Produziert optisch schöne Liste mit den Namen und Werten.
Einen noch ausgefalleneren version (danke Ruud) sortiert die Elemente:
Gibt es schon eine Menge Antworten in diesem thread, aber keiner von Ihnen besonders geholfen hat mir, musste ich es mir, so hoffe ich, dass dies ist ein wenig mehr informativ.
Sie müssen nur sicherstellen, dass Sie Klammern am Ende der Klasse e.g:
Hier ist ein Beispiel-code aus einem Projekt, an dem ich arbeitete:
Drucken meine Wasserstoff-Klasse, ich habe folgende:
Bitte beachten Sie, dass dies nicht funktionieren wird, ohne die Klammern am Ende von Wasserstoff. Sind Sie notwendig.
Hoffe, das hilft, lassen Sie mich wissen, wenn Sie haben mehr Fragen.
verwenden Sie einfach "__str__" spezielle Methode in Ihrer Klasse.
Für die ex.
Klasse Adiprogrammer:
yash = Adiprogrammer("Aaditya")
print(yash)