我为类方法编写了一个装饰器
def decor(method): def wrapped(self, *args, **kwargs): return method(self, *args, **kwargs) # [*] return wrapped
我想用这个:
class A(metaclass=mymetaclass): @decor def meth(self): pass
我如何在装饰器中添加方法/变量到具有装饰方法的类?我需要它做近[*]
.里面裹着我可以写self.__class__
,但在这做什么?
我无法想象一种满足这种要求的方法,因为decor
函数只接收一个对包含类一无所知的函数对象.
我能想象的唯一解决方法是使用参数化装饰器并将其传递给正在装饰的类
def decor(cls): def wrapper(method): def wrapped(self, *args, **kwargs): return self.method(*args, **kwargs) print method # only a function object here return wrapped print cls # here we get the class and can manipulate it return wrapper class A @decor(A) def method(self): pass
或者,你可以装饰类本身:
def cdecor(cls): print 'Decorating', cls # here we get the class and can manipulate it return cls @cdecor class B: def meth(self): pass
得到:
Decorating __main__.B