一个装饰器已经作用在一个函数上,你想撤销它,直接访问原始的未包装的那个函数。
假设装饰器是通过 @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装饰器由浅入深的使用技巧和注意事项,需要的朋友参考一下 装饰器的功能在很多语言中都有,名字也不尽相同,其实它体现的是一种设计模式,强调的是开放封闭原则,更多的用于后期功能升级而不是编写新的代码。装饰器不光能装饰函数,也能装饰其他的对象,比如类,但通常,我们以装饰函数为例子介绍其用法。要理解在Python中装饰器的原理,需要一步一步
本文向大家介绍谈一谈python的装饰器(decorator)?相关面试题,主要包含被问及谈一谈python的装饰器(decorator)?时的应答技巧和注意事项,需要的朋友参考一下 装饰器本质上是一个python函数,它可以让其他函数在不作任何变动的情况下增加额外功能,函数是对象,传入的是一个函数
问题 一个装饰器已经作用在一个函数上,你想撤销它,直接访问原始的未包装的那个函数。 解决方案 假设装饰器是通过 @wraps (参考9.2小节)来实现的,那么你可以通过访问 __wrapped__ 属性来访问原始函数: >>> @somedecorator >>> def add(x, y): ... return x + y ... >>> orig_add = add.__wrappe
本文向大家介绍浅谈Java设计模式系列-装饰器模式,包括了浅谈Java设计模式系列-装饰器模式的使用技巧和注意事项,需要的朋友参考一下 一、概述 装饰器模式作用是针对目标方法进行增强,提供新的功能或者额外的功能。 不同于适配器模式和桥接模式,装饰器模式涉及的是单方,和代理模式相同,而且目标必须是抽象的。 而实际上,装饰器模式和代理模式的实现方式基本一致,只在目标的存在上有些差别,这个后面我们具体讲
本文向大家介绍浅谈angularJS 作用域,包括了浅谈angularJS 作用域的使用技巧和注意事项,需要的朋友参考一下 案例说明: 虽然在 childCtrl 中没有定义具体的 args 属性,但是因为 childCtrl 的作用域继承自 parentCtrl 的作用域, 因此,childCtrl通过原型链 到父作用域args 属性并设置到input中。且在父input中输入值自己动同步到子i
问题内容: 这是python装饰器的示例。我无法理解它的工作方式。请向我解释给定示例的控制流程。我将非常有义务。 问题答案: 装饰器是在Python中应用高阶函数的语法糖。高阶函数是将一个或多个函数作为输入并返回一个函数的函数。即 这里是一个高阶函数,它接受单个参数的函数,并返回单个参数的函数。您可以将其视为修改的行为。 高阶函数是可组合的(根据定义),因此在您的特定示例中,装饰器语法, 等价于
Django为视图提供了数个装饰器,用以支持相关的HTTP服务。 允许的HTTP 方法 django.views.decorators.http 包里的装饰器可以基于请求的方法来限制对视图的访问。若条件不满足会返回 django.http.HttpResponseNotAllowed。 require_http_methods(request_method_list)[source] 限制视图只能
装饰器(Decorators)(被babel支持, 在 03/17 之后作为stage-2的proposal被引入) 如果你在使用类似于mobx的库, 你能够使用装饰器装饰你的函数. 装饰器本质上其实就是将组件传入一个函数. 使用装饰器能让组件更灵活,更可读并且更易修改组件的功能. 不使用装饰器的例子 class ProfileContainer extends Component { //