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

已获取被装饰函数参数,如何获取装饰器test_decorator的参数a、b、c?

获取装饰器的参数值方法

默认情况下,functools.wraps 只会复制原函数的元数据,不会保留装饰器自身的参数。要获取 test_decorator 的参数 a、b、c,需要在装饰器内部手动将这些参数绑定到包装函数的属性中,具体步骤如下:

1. 修改装饰器,存储参数

修改装饰器代码,把装饰器的参数保存为包装函数的自定义属性:

import functools

def test_decorator(a, b, c):
    def decorator(function):
        @functools.wraps(function)
        def wrapper(*args, **kwargs):
            return function(*args, **kwargs)
        # 将装饰器参数存入wrapper的自定义属性
        wrapper.decorator_params = {'a': a, 'b': b, 'c': c}
        return wrapper
    return decorator

@test_decorator(a=1, b=2, c=3)
def test(d, e, f):
    return None

2. 获取装饰器参数

现在可以直接通过被装饰函数的属性读取参数:

# 获取所有装饰器参数
print(test.decorator_params)  # 输出: {'a': 1, 'b': 2, 'c': 3}

# 单独获取某个参数
print(test.decorator_params['b'])  # 输出: 2

补充说明

如果无法修改原装饰器代码,没有办法直接获取这些参数——因为装饰器执行时的参数不会自动被留存,必须提前在装饰器内部做存储逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:25:21