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

如何在不执行包装函数的情况下直接调用被装饰的函数?

跳过装饰器直接调用原函数的方法

有两种常用方式可以绕过装饰器的包装逻辑,直接调用原函数:

  • 利用__wrapped__属性(Python 3.3+)
    大部分遵循规范的装饰器(比如用functools.wraps实现的)都会给包装函数添加__wrapped__属性,指向被装饰的原函数。直接调用这个属性对应的函数即可:

    @some_authorization
    def to_call():
        pass
    
    # 直接执行原函数,跳过装饰器逻辑
    to_call.__wrapped__()
    

    注意:如果装饰器没有使用functools.wraps,这个属性可能不存在。

  • 手动保存原函数引用(自定义装饰器场景)
    如果你能控制装饰器的实现,可以在装饰器里手动给包装函数绑定一个指向原函数的属性:

    def some_authorization(func):
        def wrapper():
            # 这里是装饰器的原有逻辑
            func()
        # 手动把原函数绑定到包装器的属性上
        wrapper.original_func = func
        return wrapper
    
    @some_authorization
    def to_call():
        pass
    
    # 通过自定义属性调用原函数
    to_call.original_func()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 10:45:32