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

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


当前回答

例如,如果你正在使用shell plus,你可以用这个代替:

>> MyObject??

这样,带'??’就在你的对象后面,它会显示类的所有属性/方法。

其他回答

如果你特别需要方法,你应该使用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)]

有时检查。isroutine也很有用(对于内置,C扩展,没有“binding”编译器指令的Cython)。

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

hasattr(object,"method")

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

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

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

help(object.method)

查看pydocs、方法签名等。

啊…REPL。

...除了简单地检查调用方法时是否发生错误之外,是否至少有一种简单的方法来检查它是否具有特定的方法

虽然“请求原谅比请求允许更容易”肯定是python的方式,但你可能在寻找:

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

没有可靠的方法可以列出所有对象的方法。Dir (object)通常是有用的,但在某些情况下,它可能不会列出所有的方法。根据dir()文档:“使用参数,尝试返回该对象的有效属性列表。”

检查方法是否存在可以通过callable(getattr(object, method))来完成,就像前面提到的那样。