Bestehende Antworten machen einen guten Job, den Sie zeigen, wie die Attribute eines Objekts zu erhalten, aber nicht beantworten genau die Frage, die Sie gestellt - wie die Methoden erhalten eines Objekts. Python-Objekte haben einen einheitlichen Namespace (anders als in Ruby, wo Methoden und Attribute unterschiedliche Namespaces verwenden). Betrachten Sie zum Beispiel:
>>> class X(object):
... @classmethod
... def clame(cls): pass
... @staticmethod
... def stame(): pass
... def meth(self): pass
... def __init__(self):
... self.lam = lambda: None
... self.val = 23
...
>>> x = X()
>>> dir(x)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__',
'__getattribute__', '__hash__', '__init__', '__module__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
'__sizeof__', '__str__', '__subclasshook__', '__weakref__',
'clame', 'lam', 'meth', 'stame', 'val']
((Ausgabe-Split für Lesbarkeit)).
Wie Sie sehen, ist dies die Namen aller Attribute geben - darunter viele spezielle Methoden, die von object
nur vererbt werden, Attribute spezielle Daten wie __class__
, __dict__
und __doc__
, pro Instanz Datenattribute (val
) , pro Instanz ausführbare Attribute (lam
), sowie tatsächliche Methoden.
Falls und wenn Sie brauchen mehr selektiv zu sein, versuchen Sie:
>>> import inspect
>>> [n for n, v in inspect.getmembers(x, inspect.ismethod)]
['__init__', 'clame', 'meth']
Standard-Bibliotheksmodul inspect
ist der beste Weg, Selbstbeobachtung in Python zu tun: es baut auf dem eingebauten in Selbstbeobachtung Haken (z als dir
und fortgeschrittenere), um Ihnen nützliche, reichhaltige und einfache Introspektionsdienste anzubieten. Hier sehen Sie beispielsweise, dass nur Instanz- und Klassenmethoden angezeigt werden, die speziell von dieser Klasse entworfen wurden - keine statischen Methoden, keine Instanzattribute, ob aufrufbar oder nicht, keine speziellen Methoden, die von object
übernommen wurden. Wenn Ihre Selektivitätsanforderungen etwas anders sind, können Sie einfach Ihre eigene optimierte Version von ismethod
erstellen und als zweites Argument von getmembers
übergeben, um die Ergebnisse genau auf Ihre Bedürfnisse abzustimmen.
funktioniert! danke – potlee