浅谈解除装饰器作用(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启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
Apr 09 Python
初步解析Python下的多进程编程
Apr 28 Python
遍历python字典几种方法总结(推荐)
Sep 11 Python
django开发教程之利用缓存文件进行页面缓存的方法
Nov 10 Python
tensorflow 获取变量&打印权值的实例讲解
Jun 14 Python
pycharm运行程序时在Python console窗口中运行的方法
Dec 03 Python
python利用requests库模拟post请求时json的使用教程
Dec 07 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
Feb 01 Python
Django 全局的static和templates的使用详解
Jul 19 Python
PyTorch 普通卷积和空洞卷积实例
Jan 07 Python
python3格式化字符串 f-string的高级用法(推荐)
Mar 04 Python
解决python对齐错误的方法
Jul 16 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动态生成函数示例
2014/03/21 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
js jquery数组介绍
2012/07/15 Javascript
javascrip关于继承的小例子
2013/05/10 Javascript
改变文件域的样式实现思路同时兼容ie、firefox
2013/10/23 Javascript
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
js获取某元素的class里面的css属性值代码
2014/01/16 Javascript
jQuery focus和blur事件的应用详解
2014/01/26 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
js轮播图代码分享
2016/07/14 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
Node实战之不同环境下配置文件使用教程
2018/01/02 Javascript
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
使用webpack3.0配置webpack-dev-server教程
2018/05/29 Javascript
小程序图片长按识别功能的实现方法
2018/08/30 Javascript
对angular2中的ngfor和ngif指令嵌套实例讲解
2018/09/12 Javascript
详解Vue项目中实现锚点定位
2019/04/24 Javascript
vue中使用v-for时为什么不能用index作为key
2020/04/04 Javascript
vue中touch和click共存的解决方式
2020/07/28 Javascript
OpenCV实现人脸识别
2017/04/07 Python
Python切片操作深入详解
2018/07/27 Python
python画图常规设置方式
2020/03/05 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
浅谈tensorflow模型保存为pb的各种姿势
2020/05/25 Python
python实现画图工具
2020/08/27 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
英国最红的高街时尚品牌:Topshop
2016/08/05 全球购物
服务承诺书范文
2014/05/19 职场文书
党员承诺践诺书
2014/05/20 职场文书
幼师求职信
2014/06/23 职场文书
国际商务专业毕业生自我鉴定2014
2014/09/27 职场文书
实习护士自荐信
2015/03/25 职场文书
行政经理岗位职责
2015/04/15 职场文书
我的中国梦主题教育活动总结
2015/05/07 职场文书
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs
Java 异步任务计算FutureTask
2022/04/28 Java/Android