如何在不执行包装函数的情况下直接调用被装饰的函数?
跳过装饰器直接调用原函数的方法
有两种常用方式可以绕过装饰器的包装逻辑,直接调用原函数:
利用
__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
相关产品推荐
相关产品推荐

