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

1voto

Mahdi Ghelichi Punkte 941

Eine Liste als Objekt nehmen

obj = []

list(filter(lambda x:callable(getattr(obj,x)),obj.__dir__()))

Sie erhalten:

['__add__',
 '__class__',
 '__contains__',
 '__delattr__',
 '__delitem__',
 '__dir__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__gt__',
 '__iadd__',
 '__imul__',
 '__init__',
 '__init_subclass__',
 '__iter__',
 '__le__',
 '__len__',
 '__lt__',
 '__mul__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__reversed__',
 '__rmul__',
 '__setattr__',
 '__setitem__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 'append',
 'clear',
 'copy',
 'count',
 'extend',
 'index',
 'insert',
 'pop',
 'remove',
 'reverse',
 'sort']

1voto

Bruno Bronosky Punkte 60135

...gibt es zumindest eine einfache Möglichkeit zu prüfen, ob eine bestimmte Methode vorhanden ist, außer einfach zu prüfen, ob ein Fehler auftritt, wenn die Methode aufgerufen wird

Während " Es ist einfacher, um Vergebung zu bitten als um Erlaubnis " ist sicherlich der pythonische Weg, den Sie suchen:

d={'foo':'bar', 'spam':'eggs'}
if 'get' in dir(d):
    d.get('foo')
# OUT: 'bar'

0voto

Simon PII Punkte 321

Um nach einer bestimmten Methode in einem ganzen Modul zu suchen

for method in dir(module) :
  if "keyword_of_methode" in method :
   print(method, end="\n")

0voto

Nick Cuevas Punkte 1104

Wenn Sie z. B. Shell Plus verwenden, können Sie stattdessen dies verwenden:

>> MyObject??

auf diese Weise, mit dem '??' direkt nach dem Objekt, werden Ihnen alle Attribute/Methoden der Klasse angezeigt.

0voto

Dharma Punkte 1947

Meistens möchte ich die benutzerdefinierten Methoden sehen und nicht die eingebauten Attribute, die mit '__' beginnen. Wenn Sie das möchten, können Sie den folgenden Code verwenden:

object_methods = [method_name for method_name in dir(object) if callable(getattr(object, method_name)) and '__' not in method_name] 

Zum Beispiel für diese Klasse:

class Person: 
    def __init__(self, name): 
        self.name = name 
    def print_name(self):
        print(self.name)

Der obige Code wird gedruckt: ['print_name']

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