379 Stimmen

Wie kann ich in ein Python-Objekt hineinschauen?

Ich fange an, in verschiedenen Projekten mit Python zu programmieren (einschließlich Django-Webentwicklung und Panda3D-Spielentwicklung).

Um zu verstehen, was vor sich geht, möchte ich im Grunde in die Python-Objekte "hineinschauen", um zu sehen, wie sie ticken - wie ihre Methoden und Eigenschaften.

Also, sagen wir, ich habe ein Python-Objekt, was würde ich brauchen, um seinen Inhalt ausdrucken? Ist das überhaupt möglich?

27voto

titusjan Punkte 4925

Wenn Sie an einer grafischen Benutzeroberfläche interessiert sind, schauen Sie sich die folgenden Seiten an objbrowser . Es verwendet das Modul inspect aus der Python-Standardbibliothek für die darunter liegende Objekt-Introspektion.

objbrowserscreenshot

14voto

Symon Punkte 1418

Versuchen Sie ppretty

from ppretty import ppretty

class A(object):
    s = 5

    def __init__(self):
        self._p = 8

    @property
    def foo(self):
        return range(10)

print ppretty(A(), indent='    ', depth=2, width=30, seq_length=6,
              show_protected=True, show_private=False, show_static=True,
              show_properties=True, show_address=True)

Ausgabe:

__main__.A at 0x1debd68L (
    _p = 8, 
    foo = [0, 1, 2, ..., 7, 8, 9], 
    s = 5
)

13voto

wp78de Punkte 17192

Während pprint bereits von anderen erwähnt wurde, möchte ich etwas Kontext hinzufügen.

Das pprint-Modul bietet die Möglichkeit, "prett Python-Datenstrukturen in eine Form zu bringen, die als Eingabe für den Interpreter verwendet werden können. Wenn die formatierten Strukturen Objekte enthalten, die nicht zu den grundlegende Python-Typen sind, ist die Darstellung möglicherweise nicht ladbar. [ ] [ ] Instanzen enthalten sind, sowie viele andere eingebaute Objekte, die nicht als Python-Konstanten darstellbar sind.

pprint könnte bei Entwicklern mit PHP-Hintergrund, die nach einer Alternative zu var_dump() .

Objekte mit einem dict-Attribut lassen sich gut mit pprint() gemischt mit vars() die das Ergebnis __dict__ Attribut für ein Modul, eine Klasse, eine Instanz, usw.:

from pprint import pprint
pprint(vars(your_object))

Also, keine Notwendigkeit für eine Schleife .

Um alle Variablen, die in der Datei weltweit o lokaler Geltungsbereich einfach verwenden:

pprint(globals())
pprint(locals())

locals() zeigt Variablen, die in einer Funktion definiert sind.
Es ist auch nützlich, auf Funktionen mit ihrem entsprechenden Namen als String-Schlüssel zuzugreifen, unter andere Verwendungen :

locals()['foo']() # foo()
globals()['foo']() # foo()

Ähnlich ist es bei der Verwendung von dir() um den Inhalt eines Moduls oder die Attribute eines Objekts zu sehen.

Und es gibt noch mehr.

12voto

bayer Punkte 6687

Sie können die Attribute eines Objekts mit dir() in der Shell auflisten:

>>> dir(object())
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

Natürlich gibt es auch das Inspektionsmodul: http://docs.python.org/library/inspect.html#module-inspect

9voto

0x90 Punkte 36705

Es gibt ein sehr cooles Tool namens objexplore . Hier ist ein einfaches Beispiel für die Verwendung des explore Funktion auf einen Pandas DataFrame.

import pandas as pd
df=pd.read_csv('https://storage.googleapis.com/download.tensorflow.org/data/heart.csv')

from objexplore import explore
explore(df)

Es wird folgendes in Ihrer Shell angezeigt: enter image description here

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X