如何使装饰器有选择地打开或关闭

如何使装饰器有选择地打开或关闭,第1张

如何使装饰器有选择地打开或关闭

例如,将未装饰的函数附加到装饰的函数上

unwrapped
,然后再从装饰器返回它。

例如

def add42(fn):    def wrap(i):        return fn(i) + 42    wrap.unwrapped = fn    return wrap@add42def mult3(i):    return i * 3mult3(1) # 45mult3.unwrapped(1) # 3

通过更改

add42
为以下内容,可以使此方法适用于类方法(如注释中所要求):

class add42:     def __init__(self, clsmethod):         self.classmethod = clsmethod     def __get__(self, instance, cls):         self.unwrapped = self.classmethod.__get__(cls)         return self     def __call__(self, *args):         return self.unwrapped(*args) + 42

并使用它:

class Foo:    @add42     @classmethod     def mult3(cls, i):         return  i * 3Foo.mult3(1) # 45Foo.mult3.unwrapped(1) # 3


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5663028.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存