给定一个任何类型的Python对象,是否有一种简单的方法来获得该对象拥有的所有方法的列表?

或者如果这是不可能的,是否至少有一种简单的方法来检查它是否具有特定的方法,而不是在调用方法时检查是否发生错误?


当前回答

这里指出的所有方法的问题是,您不能确定某个方法不存在。

在Python中,您可以通过__getattr__和__getattribute__拦截点调用,从而可以在“运行时”创建方法。

例子:

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中使用“请求原谅比请求许可更容易”的范例。

其他回答

获取任何对象的方法列表的最简单方法是使用help()命令。

help(object)

它将列出与该对象相关的所有可用/重要方法。

例如:

help(str)

检查它是否有特定的方法:

hasattr(object,"method")

在更直接的答案之上,如果我没有提到IPython,那就是我的疏忽。

按Tab键查看可用的方法,自动补全。

一旦你找到了一个方法,试试:

help(object.method)

查看pydocs、方法签名等。

啊…REPL。

以列表为对象

obj = []

list (lambda过滤器(x: callable getattr (obj, x), obj __dir__())。

你会得到:

['__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']

最简单的方法是使用dir(objectname)。它将显示该对象的所有可用方法。