デコレータに関する質問があります。私は、pythonでデコレータのコンセプトを理解しようとしていますが、クラスでデコレータを使用することに固執しています。Pythonのオブジェクト指向プログラムでデコレータを実装する方法
class decorate:
def __init__(self,f):
self.f = f
def __call__(self)
self.f()
@decorate
def foo():
print "inside foo"
foo()
with_class.py は、私は、単一の.pyファイル内全体のコードを配置し、期待どおりに実行しました。 OUTPUT:inside foo
しかし、クラスのオブジェクトを別の.pyファイルにデコレートして、同じ出力を取得しようとしました。 最初の.pyファイルにfoo()
をコメントし、次のコードを2番目の.pyファイルで使用しました。
use_class.py
import with_class
a = with_class.decorate()
しかし、それは誤りTypeError: __init__ takes exactly 2 arguments(1 given)
を投げています。 __init__
を呼び出す間に2つの引数を指定する必要があります。 use_class.py
でメソッドfoo
を実行するために何を渡すのが得られません。 もう一度、__call__(self,f)
をからf
を削除して使用しようとしましたが、エラーも発生します。 私はコンセプトを得ていないようです。何
@decorate
def foo():
print "inside foo"
あなたが関数として 'decorate'を書いていたら、あなたはそれを渡しましたか?その引数を渡してください。 – user2357112
なぜあなたは '飾る 'と呼んでいますか?あなたは 'with_class.foo()'を呼び出すべきです。 – Bakuriu
デコレートがクラスです。 –