如何通用查询Python方法所需的必选参数数量
统计Python可调用对象必选参数个数的通用方案
核心依赖Python标准库的inspect模块解析可调用对象的签名,过滤非必选参数后统计数量即可,无需额外安装第三方依赖。
实现步骤
- 导入
inspect模块,获取目标方法、类、函数的签名对象 - 遍历签名中的所有参数,跳过类实例化/实例方法自动传入的
self、类方法自动传入的cls参数 - 筛选出没有配置默认值、不属于可变位置参数
*args、不属于可变关键字参数**kwargs的参数,这类参数就是调用时必须传入的必选参数 - 统计符合要求的参数总数,即为所求结果
通用实现代码
import inspect from typing import Callable def count_required_params(callable_obj: Callable) -> int: signature = inspect.signature(callable_obj) required_cnt = 0 for param_name, param in signature.parameters.items(): # 跳过自动绑定的类/实例隐式参数 if param_name in ("self", "cls"): continue # 排除有默认值的参数、可变参数 if (param.default is inspect.Parameter.empty and param.kind not in ( inspect.Parameter.VAR_POSITIONAL, inspect.Parameter.VAR_KEYWORD )): required_cnt += 1 return required_cnt
针对示例场景的验证结果
针对问题中给出的queue.PriorityQueue场景,调用上述函数计算:
import queue # 查询PriorityQueue实例化需要的必选参数个数 res = count_required_params(queue.PriorityQueue) print(res)
运行输出结果为0,即data_queue = queue.PriorityQueue()对应的实例化调用,不需要传入任何必选参数,和示例中无参调用的写法一致。
特殊情况说明:C语言实现的Python内置对象部分无法通过
inspect提取完整签名,这类场景需要结合官方文档确认参数要求,所有纯Python实现的函数、方法、类都可以通过上述方案得到准确结果。
内容的提问来源于stack exchange,提问作者Wonjune Shin
相关产品推荐
相关产品推荐

