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

如何从外部脚本控制wrapt装饰器的启用与禁用

解决方法

要实现跨脚本动态禁用wrapt装饰器,核心是让enabled参数对应的可调用对象支持外部修改状态,以下是具体实现:

修改script_1.py的装饰器控制逻辑

把固定返回True的_enabled函数替换为一个可动态切换状态的类实例,让外部脚本能修改它的状态来控制装饰器是否启用:

# script_1.py
import wrapt

class DecoratorToggle:
    def __init__(self):
        self.enabled = True  # 默认启用装饰器
    def __call__(self):
        return self.enabled

# 创建全局的开关实例
decorator_toggle = DecoratorToggle()

@wrapt.decorator(enabled=decorator_toggle)
def my_decorator(wrapped, instance, args, kwargs):
    print('decorator enabled')
    return wrapped(*args, **kwargs)

@my_decorator
def my_function():
    print('function enabled')

在script_2.py中调用并禁用装饰器

导入开关实例和目标函数,先修改开关状态为False,再调用函数即可跳过装饰器逻辑:

# script_2.py
from script_1 import my_function, decorator_toggle

# 临时禁用装饰器
decorator_toggle.enabled = False
my_function()  # 仅输出: function enabled

# 可选:调用后恢复装饰器启用状态,不影响后续其他调用
decorator_toggle.enabled = True

原理说明

wrapt的enabled参数要求传入一个可调用对象,每次执行被装饰函数前,都会调用该对象来判断是否启用装饰器。通过将这个可调用对象设计为带有可修改属性的类实例,就能在外部脚本动态控制装饰器的启用状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:24:59