浅谈解除装饰器作用(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中的匿名函数使用简介
Apr 27 Python
Python运行报错UnicodeDecodeError的解决方法
Jun 07 Python
Python打包文件夹的方法小结(zip,tar,tar.gz等)
Sep 18 Python
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
Apr 11 Python
Python自动化运维之IP地址处理模块详解
Dec 10 Python
单利模式及python实现方式详解
Mar 20 Python
浅述python中深浅拷贝原理
Sep 18 Python
详解基于python-django框架的支付宝支付案例
Sep 23 Python
python selenium 执行完毕关闭chromedriver进程示例
Nov 15 Python
Python使用enumerate获取迭代元素下标
Feb 03 Python
Python3之外部文件调用Django程序操作model等文件实现方式
Apr 07 Python
详细介绍python类及类的用法
May 31 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递归实现无限分类生成下拉列表的函数
2010/08/08 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(四)
2014/06/23 PHP
php调用shell的方法
2014/11/05 PHP
PHP中仿制 ecshop验证码实例
2017/01/06 PHP
PHP单例模式简单用法示例
2017/06/23 PHP
javascript面向对象入门基础详细介绍
2012/09/05 Javascript
js调试系列 初识控制台
2014/06/18 Javascript
JavaScript中的replace()方法使用详解
2015/06/06 Javascript
关于javascript中dataset的问题小结
2015/11/16 Javascript
谈谈javascript中使用连等赋值操作带来的问题
2015/11/26 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
Bootstrap源码解读标签、徽章、缩略图和警示框(8)
2016/12/26 Javascript
bootstrap实现动态进度条效果
2017/03/08 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
Angular 5.0 来了! 有这些大变化
2017/11/15 Javascript
vue使用echarts图表的详细方法
2018/10/22 Javascript
JS实现根据数组对象的某一属性排序操作示例
2019/01/14 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
2019/01/24 Javascript
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
浅谈JavaScript中this的指向更改
2020/07/28 Javascript
javascript解析json格式的数据方法详解
2020/08/07 Javascript
Python help()函数用法详解
2014/03/11 Python
Python基于numpy灵活定义神经网络结构的方法
2017/08/19 Python
python机器学习库常用汇总
2017/11/15 Python
如何理解Python中包的引入
2020/05/29 Python
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
Mamas & Papas沙特阿拉伯:英国最受欢迎的婴儿品牌
2017/11/20 全球购物
卡西欧G-SHOCK英国官网: 防水防震手表
2018/01/08 全球购物
五水共治一句话承诺
2014/05/30 职场文书
2014年质量工作总结
2014/11/22 职场文书
团委工作总结2015
2015/04/02 职场文书
初中政治教学反思
2016/02/23 职场文书
Golang解析JSON对象
2022/04/30 Golang