Ich fange an, in verschiedenen Projekten mit Python zu programmieren (einschließlich Django-Webentwicklung und Panda3D-Spieleentwicklung).
Um zu verstehen, was los ist, möchte ich im Grunde genommen in die Python-Objekte schauen, um zu sehen, wie sie ticken - wie ihre Methoden und Eigenschaften.
Angenommen, ich habe ein Python-Objekt. Was würde ich benötigen, um dessen Inhalt auszudrucken? Ist das überhaupt möglich?
python
introspection
littlejim84
quelle
quelle
object.__dict__
quelle
vars(object)
ist dafür gemacht.from pprint import pprint; pprint(vars(object))
gab mir eine wirklich schöne Sicht auf den Inhalt meines Objekts. Vielen Dank an @liberforceLesen Sie zuerst die Quelle.
Zweitens verwenden Sie die
dir()
Funktion.quelle
Ich bin überrascht, dass noch niemand die Hilfe erwähnt hat!
Mithilfe der Hilfe können Sie die Dokumentzeichenfolge lesen und sich ein Bild davon machen, welche Attribute eine Klasse möglicherweise hat. Dies ist sehr hilfreich.
quelle
Wenn dies zur Erkundung dient, um zu sehen, was los ist, würde ich empfehlen, sich IPython anzusehen . Dadurch werden verschiedene Verknüpfungen hinzugefügt, um eine Objektdokumentation, Eigenschaften und sogar Quellcode zu erhalten. Zum Beispiel ein "?" zu einer Funktion gibt die Hilfe für das Objekt (effektiv eine Verknüpfung für "Hilfe (obj)", wobei bei Verwendung von zwei? 's ("
func??
") der Quellcode angezeigt wird, wenn er verfügbar ist.Es gibt auch viele zusätzliche Annehmlichkeiten wie das Ausfüllen von Registerkarten, das hübsche Drucken von Ergebnissen, den Ergebnisverlauf usw., die es für diese Art der explorativen Programmierung sehr praktisch machen.
Für weitere programmatische Verwendung von Selbstbeobachtung, wie die grundlegenden builtins
dir()
,vars()
,getattr
wird usw. nützlich sein, aber es lohnt sich, Ihre Zeit das zu prüfen , inspizieren Modul. Um die Quelle einer Funktion abzurufen, verwenden Sie "inspect.getsource
", z. B. und wenden Sie sie auf sich selbst an:inspect.getargspec
ist auch häufig nützlich, wenn Sie sich mit dem Umschließen oder Bearbeiten von Funktionen befassen, da hier die Namen und Standardwerte der Funktionsparameter angegeben werden.quelle
Wenn Sie an einer grafischen Benutzeroberfläche interessiert sind, schauen Sie sich objbrowser an . Es verwendet das Inspect-Modul aus der Python-Standardbibliothek für die darunter liegende Objektinspektion.
quelle
Sie können die Attribute eines Objekts mit dir () in der Shell auflisten:
Natürlich gibt es auch das Inspect-Modul: http://docs.python.org/library/inspect.html#module-inspect
quelle
quelle
Versuchen Sie es mit ppretty
Ausgabe:
quelle
Andere haben bereits das eingebaute dir () erwähnt, das sich nach dem anhört, wonach Sie suchen, aber hier ist ein weiterer guter Tipp. Viele Bibliotheken - einschließlich der meisten Standardbibliotheken - werden in Quellform verteilt. Das heißt, Sie können den Quellcode ziemlich einfach direkt lesen. Der Trick besteht darin, es zu finden; beispielsweise:
Die * .pyc-Datei wird kompiliert. Entfernen Sie daher das nachfolgende 'c' und öffnen Sie die nicht kompilierte * .py-Datei in Ihrem bevorzugten Editor oder Datei-Viewer:
Ich fand das unglaublich nützlich, um herauszufinden, welche Ausnahmen von einer bestimmten API ausgelöst werden. Diese Art von Details ist in der Python-Welt selten gut dokumentiert.
quelle
Während
pprint
bereits von anderen erwähnt wurde, möchte ich einen Kontext hinzufügen.pprint
Möglicherweise sind Entwickler mit PHP-Hintergrund, die nach einer Alternative zu suchen, sehr gefragtvar_dump()
.Objekte mit einem dict-Attribut können mithilfe von
pprint()
gemischt mit gut ausgegeben werdenvars()
, wodurch das__dict__
Attribut für ein Modul, eine Klasse, eine Instanz usw.: Zurückgegeben wird.Es ist also keine Schleife erforderlich .
Um alle im globalen oder lokalen Bereich enthaltenen Variablen zu sichern, verwenden Sie einfach:
locals()
zeigt in einer Funktion definierte Variablen.Es ist auch nützlich , um Zugriffsfunktionen mit ihren entsprechenden Namen als String - Schlüssel, unter anderen Verwendungen :
Ebenso mit
dir()
Sie den Inhalt eines Moduls oder die Attribute eines Objekts anzeigen.Und es gibt noch mehr.
quelle
Wenn Sie sich Parameter und Methoden ansehen möchten, wie andere bereits betont haben, können Sie
pprint
oder verwendendir()
Wenn Sie den tatsächlichen Wert des Inhalts sehen möchten, können Sie dies tun
object.__dict__
quelle
Zwei großartige Tools zum Überprüfen von Code sind:
IPython . Ein Python-Terminal, mit dem Sie die Tab-Vervollständigung überprüfen können.
Eclipse mit dem PyDev-Plugin . Es verfügt über einen hervorragenden Debugger, mit dem Sie an einer bestimmten Stelle brechen und Objekte untersuchen können, indem Sie alle Variablen als Baum durchsuchen. Sie können sogar das eingebettete Terminal verwenden, um Code an dieser Stelle zu testen, oder das Objekt eingeben und '.' Drücken. damit es Code-Hinweise für Sie gibt.
quelle
pprint und dir arbeiten hervorragend zusammen
quelle
Es gibt eine Python-Codebibliothek, die nur für diesen Zweck erstellt wurde: inspect Eingeführt in Python 2.7
quelle
Wenn Sie interessiert sind , den Quellcode der Funktion zu sehen , zu dem Objekt entspricht
myobj
, können Sie eintippeniPython
oderJupyter Notebook
:myobj??
quelle
oder
quelle
Wenn Sie in ein Live-Objekt schauen möchten, ist das Python-
inspect
Modul eine gute Antwort. Im Allgemeinen funktioniert es, um den Quellcode von Funktionen abzurufen, die in einer Quelldatei irgendwo auf der Festplatte definiert sind. Wenn Sie die Quelle von Live-Funktionen und Lambdas erhalten möchten, die im Interpreter definiert wurden, können Siedill.source.getsource
von verwendendill
. Es kann auch den Code für gebundene oder ungebundene Klassenmethoden und -funktionen abrufen, die in Currys definiert sind. Möglicherweise können Sie diesen Code jedoch nicht ohne den Code des umschließenden Objekts kompilieren.quelle
vars (obj) gibt die Attribute eines Objekts zurück.
quelle
Wenn Sie in Listen und Wörterbüchern suchen möchten, können Sie außerdem pprint () verwenden.
quelle
Viele gute Tipps schon, aber der kürzeste und einfachste (nicht unbedingt der beste) muss noch erwähnt werden:
quelle
Versuchen Sie es mit:
object
ist der Variablenname des Objekts, das Sie untersuchen möchten?Dadurch wird eine gut formatierte Ausgabe mit Registerkarten gedruckt, in der die gesamte Hierarchie der Schlüssel und Werte im Objekt angezeigt wird.
HINWEIS: Dies funktioniert in Python3. Nicht sicher, ob es in früheren Versionen funktioniert
UPDATE: Dies funktioniert nicht bei allen Objekttypen. Wenn Sie auf einen dieser Typen stoßen (z. B. ein Anforderungsobjekt), verwenden Sie stattdessen einen der folgenden Typen:
dir(object())
oder
import pprint
dann:pprint.pprint(object.__dict__)
quelle