652 Stimmen

Herausfinden, welche Methoden ein Python-Objekt hat

Gibt es bei einem beliebigen Python-Objekt eine einfache Möglichkeit, die Liste aller Methoden zu erhalten, die dieses Objekt hat?

Oder,

wenn dies nicht möglich ist, gibt es zumindest eine einfache Möglichkeit zu überprüfen, ob es eine bestimmte Methode hat, außer einfach zu überprüfen, ob ein Fehler auftritt, wenn die Methode aufgerufen wird?

0 Stimmen

728voto

ljs Punkte 35909

Für viele Objekte können Sie den folgenden Code verwenden, wobei Sie "object" durch das gewünschte Objekt ersetzen:

object_methods = [method_name for method_name in dir(object)
                  if callable(getattr(object, method_name))]

Ich habe es entdeckt bei diveintopython.net (jetzt archiviert), die einige weitere Details liefern sollte!

Wenn Sie eine AttributeError können Sie stattdessen Folgendes verwenden :

getattr() ist intolerant gegenüber abstrakten virtuellen Unterklassen im Stil von Python 3.6 von Pandas. Dieser Code tut das Gleiche wie oben und ignoriert Ausnahmen.

import pandas as pd
df = pd.DataFrame([[10, 20, 30], [100, 200, 300]],
                  columns=['foo', 'bar', 'baz'])
def get_methods(object, spacing=20):
  methodList = []
  for method_name in dir(object):
    try:
        if callable(getattr(object, method_name)):
            methodList.append(str(method_name))
    except Exception:
        methodList.append(str(method_name))
  processFunc = (lambda s: ' '.join(s.split())) or (lambda s: s)
  for method in methodList:
    try:
        print(str(method.ljust(spacing)) + ' ' +
              processFunc(str(getattr(object, method).__doc__)[0:90]))
    except Exception:
        print(method.ljust(spacing) + ' ' + ' getattr() failed')

get_methods(df['foo'])

350voto

Bill the Lizard Punkte 384619

Sie können den eingebauten dir() um eine Liste aller Attribute eines Moduls zu erhalten. Probieren Sie dies in der Befehlszeile aus, um zu sehen, wie es funktioniert.

>>> import moduleName
>>> dir(moduleName)

Außerdem können Sie die hasattr(module_name, "attr_name") Funktion, um herauszufinden, ob ein Modul ein bestimmtes Attribut hat.

Siehe die Anleitung zur Python-Introspektion für weitere Informationen.

148voto

Pawan Kumar Punkte 1894

Die einfachste Methode ist die Verwendung von dir(objectname) . Es werden alle für dieses Objekt verfügbaren Methoden angezeigt.

40voto

ivanleoncz Punkte 7119

Ich glaube, dass Sie etwas in dieser Art wollen:

eine Liste von Attributen eines Objekts

Die eingebaute Funktion dir() kann diese Aufgabe übernehmen.

Entnommen aus help(dir) Ausgabe auf Ihrer Python-Shell:

dir(...)

dir([object]) -> list of strings

Bei einem Aufruf ohne Argument werden die Namen im aktuellen Bereich zurückgegeben.

Andernfalls wird eine alphabetisch geordnete Liste von Namen zurückgegeben, die (einige) der Attribute des angegebenen Objekts und der von ihm aus erreichbaren Attribute enthält.

Wenn das Objekt eine Methode namens __dir__ wird sie verwendet; andernfalls wird die standardmäßige dir()-Logik verwendet und zurückgegeben:

  • für ein Modulobjekt: die Attribute des Moduls.
  • für ein Klassenobjekt: seine Attribute und rekursiv die Attribute seiner Basen.
  • für jedes andere Objekt: seine Attribute, die Attribute seiner Klasse und rekursiv die Attribute der Basisklassen seiner Klasse.

Zum Beispiel:

$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>> a = "I am a string"
>>>
>>> type(a)
<class 'str'>
>>>
>>> dir(a)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__',
'__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__',
'__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__',
'__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'_formatter_field_name_split', '_formatter_parser', 'capitalize',
'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find',
'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace',
'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition',
'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip',
'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title',
'translate', 'upper', 'zfill']

34voto

Um zu prüfen, ob es eine bestimmte Methode hat:

hasattr(object,"method")

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