浅谈解除装饰器作用(python3新增)


Posted in Python onOctober 15, 2018

一个装饰器已经作用在一个函数上,你想撤销它,直接访问原始的未包装的那个函数。

假设装饰器是通过 @wraps 来实现的,那么你可以通过访问 wrapped 属性来访问原始函数:

>>> @somedecorator
>>> def add(x, y):
...  return x + y
...
>>> orig_add = add.__wrapped__
>>> orig_add(3, 4)
7
>>>

如果有多个包装器:

In [588]: from functools import wraps

In [589]: def decorator1(func):
  ...:  @wraps(func)
  ...:  def wrapper(*args, **kwargs):
  ...:   print ('Decorator 1')
  ...:   return func(*args, **kwargs)
  ...:  return wrapper
  ...: 

In [590]: def decorator2(func):
  ...:  @wraps(func)
  ...:  def wrapper(*args, **kwargs):
  ...:   print ('Decorator 2')
  ...:   return func(*args, **kwargs)
  ...:  return wrapper
  ...: 

In [591]: @decorator1
  ...: @decorator2
  ...: def add(x, y):
  ...:  return x+y
  ...: 

In [592]: add(2,3)
Decorator 1
Decorator 2
Out[592]: 5

In [593]: add.__wrapped__(2, 3)
Decorator 2
Out[593]: 5

In [594]: add.__wrapped__.__wrapped__(2,3)
Out[594]: 5

参考:Python Cookbook

以上这篇浅谈解除装饰器作用(python3新增)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python验证码识别
Jan 25 Python
详解Python中open()函数指定文件打开方式的用法
Jun 04 Python
浅谈Python数据类型之间的转换
Jun 08 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
Jan 23 Python
python中ASCII码和字符的转换方法
Jul 09 Python
Python使用reportlab模块生成PDF格式的文档
Mar 11 Python
一个可以套路别人的python小程序实例代码
Apr 09 Python
Django项目后台不挂断运行的方法
Aug 31 Python
python 实现兔子生兔子示例
Nov 21 Python
django 获取字段最大值,最新的记录操作
Aug 09 Python
python简单实现插入排序实例代码
Dec 16 Python
一文搞懂python异常处理、模块与包
Jun 26 Python
python  创建一个保留重复值的列表的补码
Oct 15 #Python
python 美化输出信息的实例
Oct 15 #Python
python  Django中的apps.py的目的是什么
Oct 15 #Python
使用Python监视指定目录下文件变更的方法
Oct 15 #Python
Python调用adb命令实现对多台设备同时进行reboot的方法
Oct 15 #Python
彻彻底底地理解Python中的编码问题
Oct 15 #Python
widows下安装pycurl并利用pycurl请求https地址的方法
Oct 15 #Python
You might like
磨咖啡豆的密诀
2021/03/03 冲泡冲煮
关于跨站脚本攻击问题
2011/12/22 Javascript
7款吸引人眼球的jQuery/CSS3特效实例分享
2013/04/25 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
深入理解JavaScript系列(28):设计模式之工厂模式详解
2015/03/03 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
2015/03/04 Javascript
有关JavaScript中call()和apply() 的一些理解
2016/05/20 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
jQuery中text() val()和html()的区别实例详解
2016/06/28 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
浅谈JS继承_寄生式继承 & 寄生组合式继承
2016/08/16 Javascript
javascript 中的console.log和弹出窗口alert
2016/08/30 Javascript
基于jQuery实现中英文切换导航条效果
2016/09/18 Javascript
BootStrap中Table隐藏后显示问题的实现代码
2017/08/31 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
微信小程序之蓝牙的链接
2017/09/26 Javascript
Node做中转服务器转发接口
2017/10/18 Javascript
JS通过位运算实现权限加解密
2018/08/14 Javascript
史上最为详细的javascript继承(推荐)
2019/05/18 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
python批量修改文件后缀示例代码分享
2013/12/24 Python
利用aardio给python编写图形界面
2017/08/21 Python
python 实现selenium断言和验证的方法
2019/02/13 Python
Python和Bash结合在一起的方法
2020/11/13 Python
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
澳大利亚珍珠首饰购物网站:Vayo Pearls
2019/03/11 全球购物
彪马西班牙官网:PUMA西班牙
2019/06/18 全球购物
公司委托书格式范文
2014/04/04 职场文书
计算机专业毕业生求职信
2014/04/30 职场文书
公司联欢会策划方案
2014/05/19 职场文书
运动会闭幕式主持词
2015/07/01 职场文书
2016五一劳动节慰问信
2015/11/30 职场文书
公司开业的祝贺语大全(60条)
2019/07/05 职场文书