You need to enable JavaScript to run this app. Python获取不受控类的__init__参数及对应默认值(无需强制实例化)
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 07:06:03