浅谈解除装饰器作用(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的ORM框架中的SQLAlchemy库的映射关系
Apr 25 Python
python远程连接服务器MySQL数据库
Jul 02 Python
对python中的高效迭代器函数详解
Oct 18 Python
Pandas删除数据的几种情况(小结)
Jun 21 Python
提升Python效率之使用循环机制代替递归函数
Jul 23 Python
使用python模拟命令行终端的示例
Aug 13 Python
python定时任务 sched模块用法实例
Nov 04 Python
django框架F&Q 聚合与分组操作示例
Dec 12 Python
python字符串常用方法及文件简单读写的操作方法
Mar 04 Python
python中urllib.request和requests的使用及区别详解
May 05 Python
Python利用socket模块开发简单的端口扫描工具的实现
Jan 27 Python
我对PyTorch dataloader里的shuffle=True的理解
May 20 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的ob_start();控制您的浏览器cache!
2007/02/14 PHP
php stream_get_meta_data返回值
2013/09/29 PHP
php模拟ping命令(php exec函数的使用方法)
2013/10/25 PHP
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
php使用str_replace替换多维数组的实现方法分析
2017/06/15 PHP
PHP实现上传图片到数据库并显示输出的方法
2018/05/31 PHP
JavaScript 原型继承
2011/12/26 Javascript
jQuery多项选项卡的实现思路附样式及代码
2014/06/03 Javascript
iframe调用父页面函数示例详解
2014/07/17 Javascript
javascript函数式编程实例分析
2015/04/25 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(二)
2015/12/10 Javascript
一系列Bootstrap导航条使用方法分享
2016/04/29 Javascript
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
jquery实现ajax加载超时提示的方法
2016/07/23 Javascript
Javascript中call,apply,bind方法的详解与总结
2016/12/12 Javascript
激动人心的 Angular HttpClient的源码解析
2017/07/10 Javascript
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
js时间转换毫秒的实例代码
2019/08/21 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
小程序实现横向滑动日历效果
2019/10/21 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
Python实现的ini文件操作类分享
2014/11/20 Python
Python requests发送post请求的一些疑点
2018/05/20 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
python性能测量工具cProfile使用解析
2019/09/26 Python
Python短信轰炸的代码
2020/03/25 Python
简述安装Slackware Linux系统的过程
2012/05/08 面试题
个人自我鉴定
2013/11/07 职场文书
新员工辞职信范文
2015/05/12 职场文书
婚育证明格式
2015/06/17 职场文书
公司员工奖惩制度
2015/08/04 职场文书
放假通知怎么写
2015/08/18 职场文书
2019个人半年工作总结
2019/06/21 职场文书
mysql 排序失效
2022/05/20 MySQL