当前位置: 移动技术网 > IT编程>脚本编程>Python > 浅谈解除装饰器作用(python3新增)

浅谈解除装饰器作用(python3新增)

2018年11月09日  | 移动技术网IT编程  | 我要评论

李宏毅咆哮,北海居,逝去日子歌词

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

假设装饰器是通过 @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新增)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网