私はその機能に鈍い繰り返しパターンのクラスを持っており、このパターンをデコレータに変えたいと思っていました。しかし、デコレータは現在のインスタンスのいくつかの属性にアクセスする必要があるので、このクラスのメソッドに変換したいと思っています。私はそれにいくつか問題があります。メソッドを同じクラスの別のメソッドのデコレータにすることはできますか?
だから、これは私が欲しいもののようになります。
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
メソッドを飾りたいです。しかし、現在のインスタンスのメソッドをデコレータとして使用する方法はわかりません。
これを行う簡単な方法はありますか?
編集:OK、答えはかなり明白です。 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
インデントを修正してください。また、コードにはクラスメソッドが含まれていないことに注意してください。 –
'somemethod'をデコレートするので、' self'以外の*インスタンスを 'mydecorator'に渡す方法を尋ねていますか? – kojiro
vimからコピーしてブラウザに貼り付けると、時には苦痛になることがあります... –