You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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')]

关键说明

  1. 筛选类方法:inspect.getmembers配合inspect.isfunction可以精准获取类中定义的所有函数(包括实例方法、类方法、静态方法),避免把类属性、内置方法混进来。
  2. 参数解析:inspect.signature能正确解析任何函数的参数签名,不管是带默认值、可变参数还是关键字参数,都能准确提取参数名。
  3. 移除self/cls:实例方法默认第一个参数是self,类方法是cls,如果你的需求不需要这些参数,可以通过判断参数名移除;如果需要保留,删掉这段判断即可。
  4. 过滤内置方法:通过name.startswith('__')排除Python内置的特殊方法,如果需要包含__init__这类方法,直接去掉这个条件就行。

之前的方案失效,本质是没处理类方法的特殊参数,也没利用专门的自省工具——inspect模块是Python处理这类反射需求的标准方案,比手动解析__code__属性靠谱得多。

内容的提问来源于stack exchange,提问作者Tester

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 01:46:18