如何获得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))