浅谈解除装饰器作用(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数据结构之二叉树的统计与转换实例
Apr 29 Python
Python字符串逐字符或逐词反转方法
May 21 Python
Python之父谈Python的未来形式
Jul 01 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
Oct 16 Python
对python字典元素的添加与修改方法详解
Jul 06 Python
selenium+python实现自动化登录的方法
Sep 04 Python
Django框架模板注入操作示例【变量传递到模板】
Dec 19 Python
python 图像平移和旋转的实例
Jan 10 Python
Python OOP类中的几种函数或方法总结
Feb 22 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
Jan 15 Python
Python实现屏幕录制功能的代码
Mar 02 Python
利用python查看数组中的所有元素是否相同
Jan 08 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
PHP.MVC的模板标签系统(五)
2006/09/05 PHP
PHP 读取和修改大文件的某行内容的代码
2009/10/30 PHP
php实现的返回数据格式化类实例
2014/09/22 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
2020/05/12 PHP
javascript Select标记中options操作方法集合
2008/10/22 Javascript
javascript 显示当前系统时间代码
2009/12/28 Javascript
查看源码的工具 学习jQuery源码不错的工具
2011/12/26 Javascript
js类型转换与引用类型详解(Boolean_Number_String)
2014/03/07 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
AngularJS封装指令方法详解
2016/12/12 Javascript
JS前端加密算法示例
2016/12/22 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
2017/11/06 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
node中使用es6/7/8(支持性与性能)
2019/03/28 Javascript
微信小程序渲染性能调优小结
2019/07/30 Javascript
解决微信小程序中的滚动穿透问题
2019/09/16 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
js实现随机点名
2021/01/19 Javascript
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
Python中使用多进程来实现并行处理的方法小结
2017/08/09 Python
python如何把嵌套列表转变成普通列表
2018/03/20 Python
PyQt5重写QComboBox的鼠标点击事件方法
2019/06/25 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
pycharm实现在子类中添加一个父类没有的属性
2020/03/12 Python
使用python matploblib库绘制准确率,损失率折线图
2020/06/16 Python
Python内置方法和属性应用:反射和单例(推荐)
2020/06/19 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
2020/10/31 Python
Pycharm 如何一键加引号的方法步骤
2021/02/05 Python
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
参观考察邀请函范文
2014/01/29 职场文书
关于成绩下滑的自我检讨书
2014/09/20 职场文书
离婚案件答辩状
2015/05/22 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书
Css预编语言及区别详解
2021/04/25 HTML / CSS