经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python3 » 查看文章
浅谈解除装饰器作用(python3新增)
来源:jb51  时间:2018/10/16 9:10:50  对本文有异议

一个装饰器已经作用在一个函数上,你想撤销它,直接访问原始的未包装的那个函数。

假设装饰器是通过 @wraps 来实现的,那么你可以通过访问 wrapped 属性来访问原始函数:

  1. >>> @somedecorator
  2. >>> def add(x, y):
  3. ... return x + y
  4. ...
  5. >>> orig_add = add.__wrapped__
  6. >>> orig_add(3, 4)
  7. 7
  8. >>>

如果有多个包装器:

  1. In [588]: from functools import wraps
  2.  
  3. In [589]: def decorator1(func):
  4. ...: @wraps(func)
  5. ...: def wrapper(*args, **kwargs):
  6. ...: print ('Decorator 1')
  7. ...: return func(*args, **kwargs)
  8. ...: return wrapper
  9. ...:
  10.  
  11. In [590]: def decorator2(func):
  12. ...: @wraps(func)
  13. ...: def wrapper(*args, **kwargs):
  14. ...: print ('Decorator 2')
  15. ...: return func(*args, **kwargs)
  16. ...: return wrapper
  17. ...:
  18.  
  19. In [591]: @decorator1
  20. ...: @decorator2
  21. ...: def add(x, y):
  22. ...: return x+y
  23. ...:
  24.  
  25. In [592]: add(2,3)
  26. Decorator 1
  27. Decorator 2
  28. Out[592]: 5
  29.  
  30. In [593]: add.__wrapped__(2, 3)
  31. Decorator 2
  32. Out[593]: 5
  33.  
  34. In [594]: add.__wrapped__.__wrapped__(2,3)
  35. Out[594]: 5

参考:Python Cookbook

以上这篇浅谈解除装饰器作用(python3新增)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号