我有一个类在函数上有一个单调的重复模式,我想把这个模式变成一个装饰器。但问题是这个decorator必须访问当前实例的一些属性,所以我想把它转换成这个类中的一个方法。我有点不对劲。在
所以,这和我想要的相似:
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在下面所说,decorator本身只是对方法进行转换。方法本身应该处理与实例相关的所有事情:
^{pr2}$
decorator只得到一个参数——它所修饰的函数或方法。它不会以
self
参数的形式传递实例–在调用decorator时,甚至没有创建类,更不用说类的实例了。实例将作为第一个参数传递给修饰函数,因此您应该将self
作为call()
的参数列表中的第一个参数。在我认为没有必要将decorator包含在类范围中。您可以这样做,但也可以在模块范围内使用它。在
相关问题 更多 >
编程相关推荐