浅谈解除装饰器作用(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 BeautifulSoup使用方法详解
Nov 21 Python
Python中的True,False条件判断实例分析
Jan 12 Python
编写Python CGI脚本的教程
Jun 29 Python
Python 绘图和可视化详细介绍
Feb 11 Python
Python利用递归实现文件的复制方法
Oct 27 Python
对Python subprocess.Popen子进程管道阻塞详解
Oct 29 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
Dec 19 Python
python实现最大优先队列
Aug 29 Python
Python数据分析模块pandas用法详解
Sep 04 Python
python集合删除多种方法详解
Feb 10 Python
python实现简单坦克大战
Mar 27 Python
selenium+headless chrome爬虫的实现示例
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缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
2014/11/28 PHP
php通过function_exists检测函数是否存在的方法
2015/03/18 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
a标签的css样式四个状态
2021/03/09 HTML / CSS
一个js封装的不错的选项卡效果代码
2008/02/15 Javascript
JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
2008/11/03 Javascript
javascript表格隔行变色加鼠标移入移出及点击效果的方法
2015/04/10 Javascript
JQuery的常用选择器、过滤器、方法全面介绍
2016/05/25 Javascript
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
vue自定义指令实现方法详解
2019/02/11 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
2019/04/25 Javascript
微信小程序image图片加载完成监听
2019/08/31 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
Python的函数的一些高阶特性
2015/04/27 Python
举例讲解Python的Tornado框架实现数据可视化的教程
2015/05/02 Python
django上传图片并生成缩略图方法示例
2017/12/11 Python
Python文本处理之按行处理大文件的方法
2018/04/09 Python
python中如何使用分步式进程计算详解
2019/03/22 Python
python实现名片管理系统项目
2019/04/26 Python
详解pyppeteer(python版puppeteer)基本使用
2019/06/12 Python
python图片二值化提高识别率代码实例
2019/08/24 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
Python读取YAML文件过程详解
2019/12/30 Python
Python Sphinx使用实例及问题解决
2020/01/17 Python
python绘制玫瑰的实现代码
2020/03/02 Python
德国知名健康零食网上商店:Seeberger
2017/07/27 全球购物
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
2014小学语文教师个人工作总结
2014/12/03 职场文书
离婚协议书范文
2015/01/26 职场文书
晚会闭幕词
2015/01/28 职场文书
小学校长个人总结
2015/03/03 职场文书
导游词之麻姑仙境
2019/11/18 职场文书
springboot+VUE实现登录注册
2021/05/27 Vue.js
基于Apache Hudi在Google云构建数据湖平台的思路详解
2022/04/07 Servers