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

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


当前回答

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

>> MyObject??

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

其他回答

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

help(object)

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

例如:

help(str)

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

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

大多数时候,我想看到用户定义的方法,我不想看到以'__'开头的内置属性,如果你想,你可以使用以下代码:

object_methods = [method_name for method_name in dir(object) if callable(getattr(object, method_name)) and '__' not in method_name] 

例如,对于这个类:

class Person: 
    def __init__(self, name): 
        self.name = name 
    def print_name(self):
        print(self.name)

上面的代码将输出:['print_name']

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

>> MyObject??

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

可以创建一个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']