如何获得Python类中的方法列表?
我想遍历一个类中的方法,或基于目前的方法来处理类或实例对象。 如何获得类方法的列表?
另请参阅:
- 如何在Python 2.5模块中列出这些方法?
- 循环使用Python / IronPython对象方法
- find对象所具有的方法
- 如何查看Python对象?
- 如何对Python 2.x中的对象执行反思?
- 如何获得对象的方法和属性的完整列表?
- 从python的类实例中找出哪些函数是可用的?
一个例子(列出optparse.OptionParser
类的方法):
>>> from optparse import OptionParser >>> import inspect >>> 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>), ... ]
注意, getmembers
返回一个2元组的列表。 第一个项目是成员的名称,第二个项目是值。
您也可以将实例传递给getmembers
:
>>> parser = OptionParser() >>> inspect.getmembers(parser, predicate=inspect.ismethod) ...
有dir(theobject)
方法来列出你的对象(作为一个元组)和检查模块(作为codeape写)的所有字段和方法列出与他们的doc(在“”“)的字段和方法。
因为所有的东西(甚至是字段)都可能在Python中调用,所以我不确定是否有一个内置的函数来只列出方法。 如果你通过dir
得到的对象是可调用的,你可能会想尝试。
Python 3.x答案没有外部库
method_list = [func for func in dir(Foo) if callable(getattr(Foo, func))]
dunder-excluded结果:
method_list = [func for func in dir(Foo) if callable(getattr(Foo, func)) and not func.startswith("__")]
尝试属性__dict__
。
你也可以从types中导入FunctionType并用class.__dict__
testing它class.__dict__
:
from types import FunctionType class Foo: def bar(self): pass def baz(self): pass def methods(cls): return [x for x, y in cls.__dict__.items() if type(y) == FunctionType] methods(Foo) # ['bar', 'baz']
请注意,您需要考虑是否需要结果中包含inheritance(但未覆盖)的基类的方法。 dir()
和inspect.getmembers()
操作确实包含基类方法,但__dict__
属性的使用不包含。
def find_defining_class(obj, meth_name): for ty in type(obj).mro(): if meth_name in ty.__dict__: return ty
所以
print find_defining_class(car, 'speedometer')
认为Python第210页
我知道这是一个旧的post,但只是写了这个function,将它留在这里是有人绊倒寻找答案:
def classMethods(the_class,class_only=False,instance_only=False,exclude_internal=True): def acceptMethod(tup): #internal function that analyzes the tuples returned by getmembers tup[1] is the #actual member object is_method = inspect.ismethod(tup[1]) if is_method: bound_to = tup[1].im_self internal = tup[1].im_func.func_name[:2] == '__' and tup[1].im_func.func_name[-2:] == '__' if internal and exclude_internal: include = False else: include = (bound_to == the_class and not instance_only) or (bound_to == None and not class_only) else: include = False return include #uses filter to return results according to internal function and arguments return filter(acceptMethod,inspect.getmembers(the_class))