如何获取Python类中的方法列表?
我想要遍历一个类里的方法,或者根据类或实例对象中的方法来处理它们。请问我怎么能得到一个类方法的列表呢?
另外,看看这些链接:
25 个回答
222
这是一个关于Python 3.x的回答,不需要使用外部库。
method_list = [func for func in dir(Foo) if callable(getattr(Foo, func))]
这是一个排除了特殊方法的结果:
method_list = [func for func in dir(Foo) if callable(getattr(Foo, func)) and not func.startswith("__")]
294
有一个叫做 dir(theobject)
的方法,可以列出你对象里的所有字段和方法,结果会以元组的形式呈现。另外,还有一个叫做 inspect 的模块(正如 codeape 所说),可以列出字段和方法,并附上它们的文档说明(用 """ 包起来)。
因为在 Python 中,任何东西(甚至字段)都可以被调用,所以我不太确定有没有内置的函数可以只列出方法。你可以试试看通过 dir
得到的 object 是否是可调用的(callable)。
450
这是一个例子(列出了optparse.OptionParser
类的方法):
>>> from optparse import OptionParser
>>> import inspect
#python2
>>> inspect.getmembers(OptionParser, predicate=inspect.ismethod)
[([('__init__', <unbound method OptionParser.__init__>),
...
('add_option', <unbound method OptionParser.add_option>),
('add_option_group', <unbound method OptionParser.add_option_group>),
('add_options', <unbound method OptionParser.add_options>),
('check_values', <unbound method OptionParser.check_values>),
('destroy', <unbound method OptionParser.destroy>),
('disable_interspersed_args',
<unbound method OptionParser.disable_interspersed_args>),
('enable_interspersed_args',
<unbound method OptionParser.enable_interspersed_args>),
('error', <unbound method OptionParser.error>),
('exit', <unbound method OptionParser.exit>),
('expand_prog_name', <unbound method OptionParser.expand_prog_name>),
...
]
# python3
>>> inspect.getmembers(OptionParser, predicate=inspect.isfunction)
...
注意,getmembers
返回的是一个包含两个元素的列表。第一个元素是成员的名字,第二个元素是它的值。
你还可以把一个实例传给getmembers
:
>>> parser = OptionParser()
>>> inspect.getmembers(parser, predicate=inspect.ismethod)
...