respuestas existentes hacen un buen trabajo de mostrar cómo obtener los atributos de un objeto, pero no responden precisamente la cuestión que usted plantea - cómo conseguir los Métodos de un objeto. Los objetos de Python tienen un espacio de nombres unificado (diferente de Ruby, donde los métodos y atributos usan diferentes espacios de nombres). Considere por ejemplo:
>>> 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']
((salida dividida para facilitar la lectura)).
Como se puede ver, esto le está dando los nombres de todos los atributos - incluyendo un montón de métodos especiales que solo se heredan de object
, los datos de atributos especiales tales como __class__
, __dict__
y __doc__
, atributos de datos por instancia (val
) , atributos ejecutables por instancia (lam
), así como los métodos reales.
Si y cuando se necesita para ser más selectivos, intente:
>>> import inspect
>>> [n for n, v in inspect.getmembers(x, inspect.ismethod)]
['__init__', 'clame', 'meth']
módulo de la biblioteca estándar inspect
es la mejor manera de hacer una introspección en Python: construye en la parte superior de la incorporada en los ganchos de introspección (tales como dir
y otros más avanzados) para ofrecerle servicios de introspección útiles, ricos y simples. Aquí, por ejemplo, puede ver que solo se muestran métodos de instancia y clase específicamente diseñados por esta clase, no métodos estáticos, atributos de instancia heredados o no, métodos especiales heredados de object
. Si sus necesidades de selectividad son ligeramente diferentes, es fácil construir su propia versión ajustada de ismethod
y pasarla como el segundo argumento de getmembers
, para adaptar los resultados a sus necesidades precisas y exactas.
funciona! gracias – potlee