私がしたいのはこれです:引数を持つPythonクラスのデコレータを持つことは可能ですか?
@add_cache(cache_this, cache_that, cache_this_and_that)
class MyDjangoModel(models.Model):
blah
しかし、最初の引数が暗黙的に実際のクラスオブジェクトであると思われるので失敗します。これを回避することは可能ですか、この美しい構文とは対照的に、醜い構文を使用することを余儀なくされていますか?
私がしたいのはこれです:引数を持つPythonクラスのデコレータを持つことは可能ですか?
@add_cache(cache_this, cache_that, cache_this_and_that)
class MyDjangoModel(models.Model):
blah
しかし、最初の引数が暗黙的に実際のクラスオブジェクトであると思われるので失敗します。これを回避することは可能ですか、この美しい構文とは対照的に、醜い構文を使用することを余儀なくされていますか?
あなたarg_cache
の定義は次のように何かをする必要があります。もちろん、3つのパラメータを使って別のことを行うこともできます。
は、適切なデコレータを返す呼び出し可能を書きます。例では、あなただけの装飾が施され、クラスにいくつかのプロパティを設定したいと仮定し
def arg_cache(cthis, cthat, cthisandthat):
def f(obj):
obj.cache_this = cthis
obj.cache_that = cthat
obj.thisandthat = cthisandthat
return obj
return f
@arg_cache(cache_this, cache_that, cache_this_and_that)
...
:
私の意見では、 'F(CLS)'のように、ネストされた関数により説明何かを引数を命名した方が良いされていると思います。説明のやり方ではもう少しいいですね。 – martineau