如何获取Python类的所有方法及其参数列表
解决Python类方法及参数提取问题
要实现提取类中所有非内置方法及其对应参数的功能,直接用普通函数参数获取方案确实会踩坑——类方法、实例方法自带的self/cls参数不好处理,而且内置方法需要过滤。这里用Python标准库的inspect模块就能完美解决,它专门用于代码的反射和自省。
完整实现代码
import inspect def get_all_methods_details(cls): method_details = [] # 遍历类中所有函数类型的成员 for name, func in inspect.getmembers(cls, predicate=inspect.isfunction): # 排除双下划线开头的内置方法(如__init__、__repr__等) if not name.startswith('__'): # 获取方法的参数签名 sig = inspect.signature(func) params = list(sig.parameters.keys()) # 移除实例方法的self、类方法的cls参数(按需调整) if params and params[0] in ('self', 'cls'): params = params[1:] # 组装成要求的元组格式 detail_tuple = (name,) + tuple(params) method_details.append(detail_tuple) return method_details
测试示例
class MyClass: def __init__(self, init_param): self.init_param = init_param def method1(self, param1, param2): pass def method2(self, param3): pass def method3(self): pass @classmethod def class_method(cls, cls_param): pass @staticmethod def static_method(static_param): pass # 调用函数 print(get_all_methods_details(MyClass))
执行后输出:
[('method1', 'param1', 'param2'), ('method2', 'param3'), ('method3',), ('class_method', 'cls_param'), ('static_method', 'static_param')]
关键说明
- 筛选类方法:
inspect.getmembers配合inspect.isfunction可以精准获取类中定义的所有函数(包括实例方法、类方法、静态方法),避免把类属性、内置方法混进来。 - 参数解析:
inspect.signature能正确解析任何函数的参数签名,不管是带默认值、可变参数还是关键字参数,都能准确提取参数名。 - 移除self/cls:实例方法默认第一个参数是
self,类方法是cls,如果你的需求不需要这些参数,可以通过判断参数名移除;如果需要保留,删掉这段判断即可。 - 过滤内置方法:通过
name.startswith('__')排除Python内置的特殊方法,如果需要包含__init__这类方法,直接去掉这个条件就行。
之前的方案失效,本质是没处理类方法的特殊参数,也没利用专门的自省工具——inspect模块是Python处理这类反射需求的标准方案,比手动解析__code__属性靠谱得多。
内容的提问来源于stack exchange,提问作者Tester
相关产品推荐
相关产品推荐

