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

如何获取Python中创建实例时所用的初始化参数及值?

解决方法

方法1:直接修改__init__存储参数

最直接的方案是在MyClass的初始化方法里,把传入的delay参数赋值给实例属性,后续就能直接通过实例访问:

class MyClass:
    def __init__(self, delay):
        self.delay = delay  # 新增该行,将参数存入实例
        self.myparam = MyOtherClass(delay)

instance = MyClass(delay=2)
print(instance.delay)  # 输出:2

参数名可通过你之前使用的inspect.signature(instance.__init__)获取。

方法2:用装饰器自动记录初始化参数

如果不想改动原类的核心逻辑,可以用装饰器捕获并存储__init__的调用参数:

import inspect

def track_init_args(cls):
    original_init = cls.__init__
    def new_init(self, *args, **kwargs):
        # 绑定参数到方法签名
        sig = inspect.signature(original_init)
        bound_args = sig.bind(self, *args, **kwargs)
        bound_args.apply_defaults()
        # 剔除self后,将参数存入实例属性
        self.__init_args__ = {k: v for k, v in bound_args.arguments.items() if k != 'self'}
        original_init(self, *args, **kwargs)
    cls.__init__ = new_init
    return cls

# 为MyClass添加装饰器
@track_init_args
class MyClass:
    def __init__(self, delay):
        self.myparam = MyOtherClass(delay)

class MyOtherClass:
    def __init__(self, delay):
        pass

instance = MyClass(delay=2)
print(instance.__init_args__)  # 输出:{'delay': 2}

这种方式无需修改原__init__的业务代码,就能完整获取初始化时的参数名和对应值。

方法3:通过调用栈回溯获取(仅作调试参考)

可以借助inspect模块解析调用栈,获取实例化时的参数,但这种方法依赖调用上下文,稳定性较差,仅适合临时调试:

import inspect

class MyClass:
    def __init__(self, delay):
        # 获取上一层调用帧(即实例化MyClass的代码所在帧)
        frame = inspect.currentframe().f_back
        # 解析帧中的局部变量,提取参数
        args_info = inspect.getargvalues(frame)
        self.init_args = {k: v for k, v in args_info.locals.items() if k != 'self'}
        self.myparam = MyOtherClass(delay)

class MyOtherClass:
    def __init__(self, delay):
        pass

instance = MyClass(delay=2)
print(instance.init_args)  # 输出:{'delay': 2}

内容的提问来源于stack exchange,提问作者Michelle Fernández

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:54:55