浅谈解除装饰器作用(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连接sql server乱码的解决方法
Jan 28 Python
python自动安装pip
Apr 24 Python
python进阶教程之异常处理
Aug 30 Python
Python给你的头像加上圣诞帽
Jan 04 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
Apr 18 Python
Python实现读写INI配置文件的方法示例
Jun 09 Python
在python中只选取列表中某一纵列的方法
Nov 28 Python
树莓派动作捕捉抓拍存储图像脚本
Jun 22 Python
Python shutil模块用法实例分析
Oct 02 Python
python实现一个点绕另一个点旋转后的坐标
Dec 04 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
Apr 14 Python
Python基于os.environ从windows获取环境变量
Jun 09 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/12/18 PHP
PHP中的闭包(匿名函数)浅析
2015/02/07 PHP
cakephp打印sql语句的方法
2015/02/13 PHP
ThinkPHP模型详解
2015/07/27 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
laravel 解决paginate查询多个字段报错的问题
2019/10/22 PHP
[IE&FireFox兼容]JS对select操作
2007/01/07 Javascript
JS去除字符串的空格增强版(可以去除中间的空格)
2009/08/26 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
详解angular部署到iis出现404解决方案
2018/08/14 Javascript
vue插件实现v-model功能
2018/09/10 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
2019/01/23 Javascript
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
JS猜数字游戏实例讲解
2020/06/30 Javascript
js动态生成表格(节点操作)
2021/01/12 Javascript
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
pandas按若干个列的组合条件筛选数据的方法
2018/04/11 Python
对Python3中的print函数以及与python2的对比分析
2018/05/02 Python
Python文件读写保存操作的示例代码
2018/09/14 Python
pandas分区间,算频率的实例
2019/07/04 Python
Python split() 函数拆分字符串将字符串转化为列的方法
2019/07/16 Python
Django框架安装及项目创建过程解析
2020/09/14 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
css3加js做一个简单的3D行星运转效果实例代码
2017/01/18 HTML / CSS
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
c语言常见笔试题总结
2016/09/05 面试题
毕业生造价工程师求职信
2013/10/17 职场文书
某某同志考察材料
2014/05/28 职场文书
运动会入场口号
2014/06/07 职场文书
企业读书活动总结
2014/06/30 职场文书
年终晚会活动方案
2014/08/21 职场文书
黄埔军校观后感
2015/06/10 职场文书
经营场所证明范本
2015/06/19 职场文书
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android