のためのデコレータとして、私はいくつかの仕事を準備し、状況に機能を記録しなければならないのためにデコレータを使用したいので、私はそのような何か書く:クラスは、クラスメソッド
class Decorator:
def __init__(self, func):
self.count = 0
self.func = func
def __call__(self, *args, **kwargs):
self.count += 1 # Simply count the call times
return self.func(self, *args, **kwargs)
class Foo:
def __init__(self):
self.value = 0
@Decorator
def test(self, value):
self.value = value # change the value of instance
print(self.value)
f = Foo()
f.test(1)
print(f.value)
print(f.test.value)
をしかしself
__call__(self, *args, **kwargs)
で対応していること、それは明らかです例えばFoo
の代わりにDecorator
のインスタンスに変更すると、f.value
は変更されませんが、f.test.value
が増加します。
Decorator
の代わりにFoo
のインスタンスをDecorator
に渡す方法はありますか?
また、この関数を実装する方法ははるかに明確ですか?
ありがとうございました。
ことができますか? –
私はあなたの質問を完全に理解していないと私は200%確信しています。あなたのコードのように、@Decoratorを使ってメソッドを呼び出した回数を記録したいとします。それは問題ありませんが、後で**カウント**にアクセスする方法を教えてください。 ** Foo **のインスタンスを** Decorator **に渡すことができる例を試しましたが、f.test.valueは機能しません。 –
'f.test.count'を使用してカウントにアクセスできます。' f 'は' Foo'のインスタンスです。 – Leon