浅谈解除装饰器作用(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的Django框架中的静态资源管理器django-pipeline
Apr 25 Python
Python中的下划线详解
Jun 24 Python
在java中如何定义一个抽象属性示例详解
Aug 18 Python
Python之用户输入的实例
Jun 22 Python
python实现屏保计时器的示例代码
Aug 08 Python
选择python进行数据分析的理由和优势
Jun 25 Python
python+Django实现防止SQL注入的办法
Oct 31 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
Dec 03 Python
python3读取csv文件任意行列代码实例
Jan 13 Python
python调用百度API实现人脸识别
Nov 17 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
Jan 27 Python
Python实现我的世界小游戏源代码
Mar 02 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程序中防止盗链
2008/04/09 PHP
php 输出双引号"与单引号'的方法
2010/05/09 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
2014/11/19 PHP
JavaScript国旗变换效果代码
2008/08/13 Javascript
利用javascript/jquery对上传文件格式过滤的方法
2009/07/25 Javascript
需要做特殊处理的DOM元素属性的访问
2010/11/05 Javascript
ie下动态加态js文件的方法
2011/09/13 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
实现局部遮罩与关闭原理及代码
2013/02/04 Javascript
js操纵dom生成下拉列表框的方法
2014/02/24 Javascript
JavaScript检查数字是否为整数或浮点数的方法
2015/06/09 Javascript
js实现点击切换TAB标签实例
2015/08/21 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
2016/08/02 Javascript
用React实现一个完整的TodoList的示例代码
2017/10/30 Javascript
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
JS无限级导航菜单实现方法
2019/01/05 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
vue实现表格过滤功能
2019/09/27 Javascript
[15:58]DOTA2国际邀请赛采访专栏:Tongfu.Sansheng&KingJ,DK.rOtk
2013/08/08 DOTA
[00:34]TI7不朽珍藏III——纯金地穴编织者饰品展示
2017/07/15 DOTA
[48:41]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
从Python的源码浅要剖析Python的内存管理
2015/04/16 Python
django框架实现一次性上传多个文件功能示例【批量上传】
2019/06/19 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
2019/06/19 Python
使用python3 实现插入数据到mysql
2020/03/02 Python
python中return不返回值的问题解析
2020/07/22 Python
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
销售经理工作职责范文
2013/12/03 职场文书
网络编辑岗位职责
2014/03/18 职场文书
《大海那边》教学反思
2014/04/09 职场文书
破坏寝室公物检讨书
2014/11/17 职场文书
2015年组织委员工作总结
2015/04/23 职场文书
教师创先争优承诺书
2015/04/27 职场文书
广告策划的实习心得体会总结!
2019/07/22 职场文书
vue实现同时设置多个倒计时
2021/05/20 Vue.js