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

如何获取Python对象通过__init__重建所需的必要变量?

解决方案

核心是用Python标准库的inspect模块获取类__init__方法的签名信息,以此过滤实例中仅属于初始化参数的变量,完全不需要修改原类。

实现代码

import inspect

class Example:
    def __init__(self, z, x=1):
        self.x = x
        self.z = z
        # 临时变量,不需要保存
        self.y = x + z

def magic_get_data(obj):
    # 获取__init__方法的签名
    sig = inspect.signature(obj.__class__.__init__)
    init_params = list(sig.parameters.keys())[1:]  # 排除第一个参数self
    data = {}
    for param in init_params:
        # 优先取实例中已有的值,没有则用参数默认值
        if param in obj.__dict__:
            data[param] = obj.__dict__[param]
        else:
            data[param] = sig.parameters[param].default
    return data

def magic_make_from_data(cls, data):
    # 用提取的初始化参数重建实例
    return cls(**data)

# 测试代码
if __name__ == "__main__":
    original = Example(z=5)
    data = magic_get_data(original)
    reconstructed = magic_make_from_data(Example, data)
    # 比较两个实例的__dict__是否一致
    print(original.__dict__ == reconstructed.__dict__)  # 输出True

关键说明

  • inspect.signature能精准获取__init__的所有参数(包括默认值),不管参数是必填还是可选。
  • magic_get_data只保留__init__定义的参数对应的变量,自动排除临时生成的y。
  • magic_make_from_data直接用关键字参数传递初始化数据,确保重建的实例和原实例的状态完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:19:58