如何获取Python类中的方法列表?

472 投票
25 回答
577720 浏览
提问于 2025-04-15 17:04

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)
...

撰写回答