浅谈解除装饰器作用(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 相关文章推荐
Python3遍历目录树实现方法
May 22 Python
理解Python中的绝对路径和相对路径
Aug 30 Python
pandas DataFrame实现几列数据合并成为新的一列方法
Jun 08 Python
Python3对称加密算法AES、DES3实例详解
Dec 06 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
Jan 14 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
Apr 04 Python
python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决
Apr 29 Python
python实现人工智能Ai抠图功能
Sep 05 Python
python 实现多维数组转向量
Nov 30 Python
python使用SQLAlchemy操作MySQL
Jan 02 Python
Python爬虫小例子——爬取51job发布的工作职位
Jul 10 Python
Python爬虫后获取重定向url的两种方法
Jan 19 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
全国FM电台频率大全 - 14 江西省
2020/03/11 无线电
使用JSON实现数据的跨域传输的php代码
2011/12/20 PHP
php实现的RSS生成类实例
2015/04/23 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
php求斐波那契数的两种实现方式【递归与递推】
2019/09/09 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
IE不支持getElementsByClassName最终完美解决方案
2012/12/17 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
Js,alert出现乱码问题的解决方法
2013/06/19 Javascript
JavaScript不使用prototype和new实现继承机制
2014/12/29 Javascript
JavaScript Math.floor方法(对数值向下取整)
2015/01/09 Javascript
js实现屏幕自适应局部代码分享
2015/01/30 Javascript
js判断文本框输入的内容是否为数字
2015/12/23 Javascript
AngularJS 霸道的过滤器小结
2017/04/26 Javascript
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
微信小程序 slot踩坑的解决
2019/04/01 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
python正则分析nginx的访问日志
2017/01/17 Python
利用python实现xml与数据库读取转换的方法
2017/06/17 Python
python matplotlib 注释文本箭头简单代码示例
2018/01/08 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
python print出共轭复数的方法详解
2019/06/25 Python
selenium+Chrome滑动验证码破解二(某某网站)
2019/12/17 Python
关于Pytorch的MLP模块实现方式
2020/01/07 Python
Python Socketserver实现FTP文件上传下载代码实例
2020/03/27 Python
Keras在训练期间可视化训练误差和测试误差实例
2020/06/16 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
电气自动化大学生求职信
2013/10/16 职场文书
行政助理的职责
2013/11/14 职场文书
面试后的英文感谢信
2014/02/01 职场文书
党的群众路线学习材料
2014/05/16 职场文书
消防志愿者活动方案
2014/08/23 职场文书
小学运动会演讲稿
2014/08/25 职场文书
《将心比心》教学反思
2016/02/23 职场文书