浅谈解除装饰器作用(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中for循环详解
Jan 17 Python
Python实现二分法算法实例
Feb 02 Python
Python中的测试模块unittest和doctest的使用教程
Apr 14 Python
基于Python中单例模式的几种实现方式及优化详解
Jan 09 Python
Redis使用watch完成秒杀抢购功能的代码
May 07 Python
django加载本地html的方法
May 27 Python
python 简单照相机调用系统摄像头实现方法 pygame
Aug 03 Python
python plotly画柱状图代码实例
Dec 13 Python
python中JWT用户认证的实现
May 18 Python
keras导入weights方式
Jun 12 Python
用python实现一个简单计算器(完整DEMO)
Oct 14 Python
MoviePy简介及Python视频剪辑自动化
Dec 18 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
丧钟首部独立剧集《丧钟:骑士与龙》北美正式开播,场面血腥
2020/04/09 欧美动漫
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
js之WEB开发调试利器:Firebug 下载
2007/01/13 Javascript
封装好的省市地区联动控件附下载
2007/08/13 Javascript
JS面向对象、prototype、call()、apply()
2009/05/14 Javascript
实测jquery data()如何存值
2013/08/18 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
2013/12/18 Javascript
javascript中使用new与不使用实例化对象的区别
2015/06/22 Javascript
js 获取经纬度的实现方法
2016/06/20 Javascript
jQuery使用deferreds串行多个ajax请求
2016/08/22 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
2016/12/28 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
详解用vue.js和laravel实现微信支付
2017/06/23 Javascript
Vue实现一个返回顶部backToTop组件
2017/07/25 Javascript
jQuery中ajax获取数据赋值给页面的实例
2017/12/31 jQuery
原生JavaScript实现todolist功能
2018/03/02 Javascript
jQuery实现ajax回调函数带入参数的方法示例
2018/06/26 jQuery
JS中‘hello’与new String(‘hello’)引出的问题详解
2018/08/14 Javascript
bootstrap Table实现合并相同行
2019/07/19 Javascript
JavaScript Array.flat()函数用法解析
2020/09/02 Javascript
js实现特别简单的钟表效果
2020/09/14 Javascript
关于Js中new操作符的作用详解
2021/02/21 Javascript
[57:22]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第五场
2018/04/10 DOTA
[49:59]KG vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python读取环境变量的方法和自定义类分享
2014/11/22 Python
Django日志模块logging的配置详解
2017/02/14 Python
Pipenv一键搭建python虚拟环境的方法
2018/05/22 Python
python实现简易内存监控
2018/06/21 Python
培训演讲稿范文
2014/01/12 职场文书
生日主持词
2014/03/20 职场文书
电子信息工程自荐信
2014/05/26 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
学校中层领导培训心得体会
2016/01/11 职场文书