查找Python對象具備的方法

給定任何種類的Python對象,是否有一種簡單的方法來獲取該對象具備的全部方法的列表? html

要麼, python

若是這不可能,那麼除了簡單地檢查調用該方法時是否發生錯誤以外,是否至少有一種簡單的方法來檢查它是否具備特定的方法? app


#1樓

...至少有一種簡單的方法能夠檢查它是否具備特定的方法,而不單單是在調用該方法時檢查是否發生錯誤 ssh

儘管「 比請求更容易得到寬恕 」無疑是Python方式,但您正在尋找的多是: 函數

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

#2樓

最簡單的方法是使用dir(objectname) 。 它將顯示該對象可用的全部方法。 很棒的把戲。 spa


#3樓

此處指出的全部方法的問題在於,您不能肯定某個方法不存在。 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而不是權限範式來請求寬恕


#4樓

若是您特別想要方法 ,則應使用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)。


#5樓

能夠建立一個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']
相關文章
相關標籤/搜索