Gibt es bei einem Python-Objekt jeglicher Art eine einfache Möglichkeit, die Liste aller Methoden dieses Objekts abzurufen?
Oder,
Wenn dies nicht möglich ist, gibt es zumindest eine einfache Möglichkeit, zu überprüfen, ob es eine bestimmte Methode gibt, außer einfach zu überprüfen, ob beim Aufruf der Methode ein Fehler auftritt?
python
introspection
Thomas Lötzer
quelle
quelle
Antworten:
Für viele Objekte können Sie diesen Code verwenden und 'Objekt' durch das Objekt ersetzen, an dem Sie interessiert sind:
Ich habe es bei diveintopython.net entdeckt (jetzt archiviert). Hoffentlich sollte das einige weitere Details liefern!
Wenn Sie eine erhalten
AttributeError
, können Sie diese stattdessen verwenden :getattr(
ist intolerant gegenüber python style python3.6 abstrakten virtuellen Unterklassen. Dieser Code macht das gleiche wie oben und ignoriert Ausnahmen.quelle
print [method for method in dir(object) if callable(getattr(object, method))]
.AttributeError: module 'pandas.core.common' has no attribute 'AbstractMethodError'
wenn ich versuche, dies auszuführen. Weitere Informationen finden Sie unter stackoverflow.com/q/54713287/9677043 .Mit der integrierten
dir()
Funktion können Sie eine Liste aller Attribute eines Moduls abrufen. Versuchen Sie dies in der Befehlszeile, um zu sehen, wie es funktioniert.Sie können die
hasattr(module_name, "attr_name")
Funktion auch verwenden, um herauszufinden, ob ein Modul ein bestimmtes Attribut hat.Weitere Informationen finden Sie im Handbuch zur Python-Introspektion .
quelle
hasattr
half meinem Anwendungsfall, herauszufinden, ob das Python-Objekt eine bestimmte Mitgliedsvariable oder -methode hat.Die einfachste Methode ist zu verwenden
dir(objectname)
. Es werden alle für dieses Objekt verfügbaren Methoden angezeigt. Cooler Trick.quelle
AttributeError: module 'pandas.core.common' has no attribute 'AbstractMethodError'
. Irgendwelche Ideen? Siehe Deets unter stackoverflow.com/q/54713287/9677043 . +1 an @Pawan Kumar b / c die Antwort funktioniert und an @ljs für das Versprechen einer gefilterten Liste nur der Methoden.So überprüfen Sie, ob es eine bestimmte Methode gibt:
quelle
if hasattr(obj,method) and callable(getattr(obj,method)):
Ich glaube, was Sie wollen, ist ungefähr so:
Meiner bescheidenen Meinung nach kann die eingebaute Funktion
dir()
diese Aufgabe für Sie erledigen. Entnommen aus derhelp(dir)
Ausgabe Ihrer Python-Shell:Zum Beispiel:
Als ich Ihr Problem überprüfte, beschloss ich, meinen Gedankengang mit einer besseren Formatierung der Ausgabe von zu demonstrieren
dir()
.dir_attributes.py (Python 2.7.6)
dir_attributes.py (Python 3.4.3)
Hoffe, dass ich dazu beigetragen habe :).
quelle
Zusätzlich zu den direkteren Antworten wäre ich mir nicht sicher, wenn ich iPython nicht erwähnen würde . Klicken Sie auf die Registerkarte, um die verfügbaren Methoden mit automatischer Vervollständigung anzuzeigen.
Und wenn Sie eine Methode gefunden haben, versuchen Sie:
um die Pydocs, Methodensignatur usw. zu sehen.
Ahh ... REPL .
quelle
Wenn Sie speziell Methoden wünschen , sollten Sie inspect.ismethod verwenden .
Für Methodennamen:
Für die Methoden selbst:
Manchmal
inspect.isroutine
kann es auch nützlich sein (für integrierte, C-Erweiterungen, Cython ohne die Compiler-Direktive "Binding").quelle
inspect.getmembers
anstattdir
in einem Listenverständnis zu verwenden?Öffnen Sie die Bash-Shell (Strg + Alt + T unter Ubuntu). Starten Sie die Python3-Shell darin. Objekt erstellen, um Methoden von zu beobachten. Fügen Sie einfach einen Punkt danach hinzu und drücken Sie zweimal die Tabulatortaste. Sie sehen so etwas:
quelle
ipython
, das Objekt eingeben und drücken können,tab
und es wird auch funktionieren. Keine Readline-Einstellungen erforderlichDas Problem bei allen hier angegebenen Methoden ist, dass Sie nicht sicher sein können, dass eine Methode nicht existiert.
In Python können Sie den durch
__getattr__
und aufgerufenen Punkt abfangen und__getattribute__
so die Methode "zur Laufzeit" erstellen.Beispiel:
Wenn Sie es ausführen, können Sie eine Methode aufrufen, die im Objektwörterbuch nicht vorhanden ist ...
Und deshalb verwenden Sie das Einfachere, um in Python um Vergebung zu bitten, als um Erlaubnisparadigmen .
quelle
Der einfachste Weg, eine Liste der Methoden eines Objekts abzurufen, ist die Verwendung eines
help()
Befehls.Es werden alle verfügbaren / wichtigen Methoden aufgelistet, die diesem Objekt zugeordnet sind.
Zum Beispiel:
quelle
%
im ersten Beispiel? In meinem Python 2.7 funktioniert es nicht.Das sollte funktionieren :)
quelle
Man kann eine
getAttrs
Funktion erstellen , die die aufrufbaren Eigenschaftsnamen eines Objekts zurückgibtDas würde zurückkehren
quelle
Es gibt keine zuverlässige Möglichkeit, alle Methoden des Objekts aufzulisten.
dir(object)
ist normalerweise nützlich, aber in einigen Fällen werden möglicherweise nicht alle Methoden aufgelistet. Lautdir()
Dokumentation : " Versuchen Sie mit einem Argument, eine Liste gültiger Attribute für dieses Objekt zurückzugeben."Die Überprüfung, ob eine Methode vorhanden ist, kann
callable(getattr(object, method))
wie dort bereits erwähnt durchgeführt werden.quelle
Nehmen Sie eine Liste als Objekt
list(filter(lambda x:callable(getattr(obj,x)),obj.__dir__()))
Du erhältst:
quelle
Während " Einfacher um Vergebung zu bitten als um Erlaubnis " sicherlich der pythonische Weg ist, suchen Sie vielleicht nach:
quelle
Um in einem ganzen Modul nach einer bestimmten Methode zu suchen
quelle
Wenn Sie beispielsweise Shell Plus verwenden, können Sie stattdessen Folgendes verwenden:
auf diese Weise mit dem '??' Direkt nach Ihrem Objekt werden Ihnen alle Attribute / Methoden der Klasse angezeigt.
quelle