python3装饰器有什么用_谈谈解除装饰器作用(python3新增)

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

假设装饰器是通过 @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新增)就是小编分享给大伙的全部内容了,希望能给大伙一个参考,也希望大家多多支持学猫在线(shtml.net)。

本文来源:https://blog.csdn.net/xiaodongxiexie/article/details/77530546

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值