例如,将未装饰的函数附加到装饰的函数上
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



