関数に鈍い繰り返しパターンを持つクラスがあり、このパターンをデコレータに変えたいと思いました。しかし問題は、このデコレーターが現在のインスタンスのいくつかの属性にアクセスする必要があることです。そのため、このデコレーターをこのクラスのメソッドに変換したいと考えました。私はそれにいくつかの問題を抱えています。
だから、これは私が望むものに似ています:
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