Python获取不受控类的__init__参数及对应默认值(无需强制实例化)
无需实例化提取第三方类
__init__参数与默认值的实现方案 基于Python内置标准库inspect实现,全程不会触发目标类的初始化逻辑,无需创建类实例即可完成解析。
实现代码
import inspect def get_init_params_with_defaults(target_cls): # 解析类__init__方法的静态签名 init_sig = inspect.signature(target_cls.__init__) res = {} for name, param in init_sig.parameters.items(): # 跳过隐式传入的self参数 if name == "self": continue # 如需过滤*args/**kwargs类可变参数,可启用下方判断 # if param.kind not in (inspect.Parameter.POSITIONAL_OR_KEYWORD, inspect.Parameter.KEYWORD_ONLY): # continue # 区分无默认值的必填参数与有固定默认值的可选参数 if param.default is inspect.Parameter.empty: # 无内置默认值的参数做无默认值占位 res[name] = None else: res[name] = param.default return res
使用方法
直接将类本身传入函数即可,全程不会实例化目标类:
# 传入目标第三方类SeomClass output = get_init_params_with_defaults(SeomClass) # 最终输出与需求格式完全一致: # {"var1": None, "var2": None, "var3": None, "var4": None}
备注:你示例中提到的
null属于JavaScript生态的概念,Python无原生null类型,使用None作为无默认值的占位完全匹配你的逻辑预期。
注意事项
- 无初始化副作用:仅读取方法的静态签名元信息,不会执行
__init__内的任何代码,不会触发第三方类的资源加载、异常抛出、状态修改等操作 - 自动过滤内部参数:默认排除
self这类不属于对外属性的隐式入参 - 可选值读取完全原生:直接读取类定义中预先声明的默认值,不会对默认值做任何修改
- 兼容可变参数场景:如果目标类的
__init__使用了*args/**kwargs这类可变入参,可通过代码中注释的过滤逻辑,将这类非固定属性的参数排除在结果外,保证结果精准
内容的提问来源于stack exchange,提问作者Jegath Suresh
相关产品推荐
相关产品推荐

