給定任何種類的Python對象,是否有一種簡單的方法來獲取該對象具備的全部方法的列表? html
要麼, python
若是這不可能,那麼除了簡單地檢查調用該方法時是否發生錯誤以外,是否至少有一種簡單的方法來檢查它是否具備特定的方法? app
...至少有一種簡單的方法能夠檢查它是否具備特定的方法,而不單單是在調用該方法時檢查是否發生錯誤 ssh
儘管「 比請求更容易得到寬恕 」無疑是Python方式,但您正在尋找的多是: 函數
d={'foo':'bar', 'spam':'eggs'} if 'get' in dir(d): d.get('foo') # OUT: 'bar'
最簡單的方法是使用dir(objectname)
。 它將顯示該對象可用的全部方法。 很棒的把戲。 spa
此處指出的全部方法的問題在於,您不能肯定某個方法不存在。 code
在Python中,您能夠經過__getattr__
和__getattribute__
截取點,從而能夠在「運行時」建立方法 orm
範例: htm
class MoreMethod(object): def some_method(self, x): return x def __getattr__(self, *args): return lambda x: x*2
若是執行它,則能夠調用對象字典中不存在的方法... 對象
>>> o = MoreMethod() >>> o.some_method(5) 5 >>> dir(o) ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattr__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'some_method'] >>> o.i_dont_care_of_the_name(5) 10
這就是爲何您在Python中使用Easier而不是權限範式來請求寬恕 。
若是您特別想要方法 ,則應使用inspect.ismethod 。
對於方法名稱:
import inspect method_names = [attr for attr in dir(self) if inspect.ismethod(getattr(self, attr))]
對於方法自己:
import inspect methods = [member for member in [getattr(self, attr) for attr in dir(self)] if inspect.ismethod(member)]
有時inspect.isroutine
也可能有用(對於內置程序,C擴展,不具備「綁定」編譯器指令的Cython)。
能夠建立一個getAttrs
函數,該函數將返回對象的可調用屬性名稱
def getAttrs(object): return filter(lambda m: callable(getattr(object, m)), dir(object)) print getAttrs('Foo bar'.split(' '))
那會回來
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']