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?

431voto

Brandon E Taylor Punkte 24119

Python verfügt über eine Reihe starker Introspektionsfunktionen.

Werfen Sie einen Blick auf das Folgende integrierte Funktionen :

type() y dir() sind besonders nützlich, um den Typ eines Objekts bzw. die Menge seiner Attribute zu untersuchen.

232voto

mtasic85 Punkte 3644

object.__dict__

90voto

Jason Baker Punkte 180981

Ich bin überrascht, dass noch niemand Hilfe angeboten hat!

In [1]: def foo():
   ...:     "foo!"
   ...:

In [2]: help(foo)
Help on function foo in module __main__:

foo()
    foo!

Mit der Hilfe können Sie den Docstring lesen und eine Vorstellung davon bekommen, welche Attribute eine Klasse haben könnte, was sehr hilfreich ist.

67voto

S.Lott Punkte 371691

Lesen Sie zunächst die Quelle.

Zweitens: Verwenden Sie die dir() Funktion.

31voto

Brian Punkte 112487

Wenn es um die Erkundung geht, um zu sehen, was vor sich geht, würde ich empfehlen, sich folgende Seiten anzusehen IPython . Dadurch werden verschiedene Abkürzungen hinzugefügt, um die Dokumentation, die Eigenschaften und sogar den Quellcode eines Objekts zu erhalten. Wenn man zum Beispiel ein "?" an eine Funktion anhängt, erhält man die Hilfe für das Objekt (effektiv eine Abkürzung für "help(obj)", während die Verwendung von zwei ?'s (" func?? ") zeigt den Quellcode an, wenn er verfügbar ist.

Außerdem gibt es viele zusätzliche Annehmlichkeiten, wie die Vervollständigung von Tabulatoren, hübsche Ausdrucke von Ergebnissen, eine Historie der Ergebnisse usw., die es für diese Art der explorativen Programmierung sehr praktisch machen.

Für die programmatische Nutzung der Introspektion sind die grundlegenden Buildins wie dir() , vars() , getattr usw. nützlich sein, aber es lohnt sich auch, sich die prüfen Modul. Um die Quelle einer Funktion zu holen, verwenden Sie " inspect.getsource " z.B. auf sich selbst anwenden:

>>> print inspect.getsource(inspect.getsource)
def getsource(object):
    """Return the text of the source code for an object.

    The argument may be a module, class, method, function, traceback, frame,
    or code object.  The source code is returned as a single string.  An
    IOError is raised if the source code cannot be retrieved."""
    lines, lnum = getsourcelines(object)
    return string.join(lines, '')

inspect.getargspec ist auch häufig nützlich, wenn Sie mit der Umhüllung oder Manipulation von Funktionen zu tun haben, da es die Namen und Standardwerte der Funktionsparameter angibt.

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