我有一个类在他们的函数上有一个沉闷的重复模式,我想把这个模式变成一个装饰器。但问题是这个装饰器必须访问当前实例的一些属性,所以我想把它变成这个类中的一个方法。我遇到了一些问题。方法可以是同一类的另一种方法的装饰器吗?
所以,这是类似于我想要的东西:
class DullRepetitiveClass:
def __init__(self, nicevariable):
self.nicevariable = nicevariable
def mydecorator(self, myfunction):
def call(*args, **kwargs):
print "Hi! The value of nicevariable is %s"%(self.nicevariable,)
return myfunction(*args, **kwargs)
return call
@mydecorator #Here, comment (1) below.
def somemethod(self, x):
return x + 1
(1)这是问题所在。我想用DullRepetitiveClass.mydecorator
方法来装饰somemethod
方法。但我不知道如何使用当前实例中的方法作为装饰器。
有没有简单的方法来做到这一点?
编辑:好的,答案很明显。正如Sven在下面所说的,装饰者本身只是改变了方法。该方法本身应该处理与实例有关的所有事情:
def mydecorator(method):
def call(self, *args, **kwargs):
print "Hi! The value of nicevariable is %s"%(self.nicevariable,)
return method(self, *args, **kwargs)
return call
class DullRepetitiveClass:
def __init__(self, nicevariable):
self.nicevariable = nicevariable
@mydecorator
def somemethod(self, x):
return x + 1
请修复您的缩进。另请注意,您的代码不包含任何类方法。 – 2012-07-31 12:57:37
您是否问过如何将“self”以外的* * *实例传递给'mydecorator',因为它装饰'somemethod'? – kojiro 2012-07-31 13:00:13
糟糕。从vim复制并粘贴到浏览器有时候会很痛苦... – 2012-07-31 13:00:39