首页 > 编程 > Python > 正文

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

2020-02-15 23:13:40
字体:
来源:转载
供稿:网友

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

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

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

如果有多个包装器:

In [588]: from functools import wrapsIn [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 1Decorator 2Out[592]: 5In [593]: add.__wrapped__(2, 3)Decorator 2Out[593]: 5In [594]: add.__wrapped__.__wrapped__(2,3)Out[594]: 5

参考:Python Cookbook

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表