Edv*_*rov 0 python python-decorators
我为类方法编写了一个装饰器
def decor(method):
def wrapped(self, *args, **kwargs):
return method(self, *args, **kwargs)
# [*]
return wrapped
Run Code Online (Sandbox Code Playgroud)
我想用这个:
class A(metaclass=mymetaclass):
@decor
def meth(self):
pass
Run Code Online (Sandbox Code Playgroud)
我如何在装饰器中添加方法/变量到具有装饰方法的类?我需要它做近[*].里面裹着我可以写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
Run Code Online (Sandbox Code Playgroud)
或者,你可以装饰类本身:
def cdecor(cls):
print 'Decorating', cls # here we get the class and can manipulate it
return cls
@cdecor
class B:
def meth(self):
pass
Run Code Online (Sandbox Code Playgroud)
得到:
Decorating __main__.B
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
838 次 |
| 最近记录: |