タグ付けされた質問 「python-decorators」


17
関数デコレータのチェーンを作る方法は?
Pythonで次のような2つのデコレータを作成するにはどうすればよいですか? @makebold @makeitalic def say(): return "Hello" ...返されるはずです: "<b><i>Hello</i></b>" 私はHTML実際のアプリケーションでこのようにしようとするのではなく、デコレータとデコレータチェーンのしくみを理解しようとしています。

14
@propertyデコレーターはどのように機能しますか?
組み込み関数がどのように機能するかを理解したいと思いpropertyます。私を混乱させるのは、それpropertyがデコレーターとしても使用できることですが、組み込み関数として使用される場合にのみ引数を取り、デコレーターとして使用される場合は取りません。 この例はドキュメントからのものです: class C(object): def __init__(self): self._x = None def getx(self): return self._x def setx(self, value): self._x = value def delx(self): del self._x x = property(getx, setx, delx, "I'm the 'x' property.") property引数はgetx、setx、delxおよびドキュメンテーション文字列。 以下のコードでpropertyは、デコレータとして使用されています。そのオブジェクトはx関数ですが、上のコードでは、引数にオブジェクト関数の場所がありません。 class C(object): def __init__(self): self._x = None @property def x(self): """I'm the 'x' property.""" return self._x …


11
「self.x = x; self.y = y; __init__のself.z = z”パターン?
次のようなパターンが表示されます def __init__(self, x, y, z): ... self.x = x self.y = y self.z = z ... かなり頻繁に、多くの場合、より多くのパラメーターを使用します。このような退屈な繰り返しを避ける良い方法はありますか?クラスはnamedtuple代わりに継承する必要がありますか?

5
自己引数を持つクラスメソッドデコレータ?
引数としてクラスメソッドのデコレータにクラスフィールドを渡すにはどうすればよいですか?私がやりたいことは次のようなものです: class Client(object): def __init__(self, url): self.url = url @check_authorization("some_attr", self.url) def get(self): do_work() self.urlデコレータに渡すための自分が存在しないと文句を言います。これを回避する方法はありますか?

10
Pythonでプロパティ機能を使用する方法についての実例?
@propertyPythonでの使用方法に興味があります。私はpythonのドキュメントを読みました、そして私の意見では、そこでの例は単なるおもちゃのコードです: class C(object): def __init__(self): self._x = None @property def x(self): """I'm the 'x' property.""" return self._x @x.setter def x(self, value): self._x = value @x.deleter def x(self): del self._x _xプロパティデコレータで塗りつぶしたものをラップすることでどのようなメリットが得られるかわかりません。次のように実装しないのはなぜですか。 class C(object): def __init__(self): self.x = None プロパティ機能は、状況によっては役立つ場合があると思います。でもいつ?誰かが実際の例を教えてくれませんか? ありがとう。

1
デコレーターの実行順序
def make_bold(fn): return lambda : "<b>" + fn() + "</b>" def make_italic(fn): return lambda : "<i>" + fn() + "</i>" @make_bold @make_italic def hello(): return "hello world" helloHTML = hello() 出力: "<b><i>hello world</i></b>" 私はデコレーターについて大まかに理解し、ほとんどの例でそれがどのように機能するかを理解しています。 この例では、2つあります。出力から、@make_italic最初に実行され、次にが実行されるようです@make_bold。 これは、装飾された関数の場合、最初に関数を実行してから、他のデコレーターの上部に移動することを意味しますか?同様に@make_italicまず@make_bold、代わりに反対の。 これは、ほとんどのプログラミング言語でのトップダウンアプローチの標準とは異なることを意味しますか?このデコレータの場合だけですか?それとも私は間違っていますか?

5
Pythonデコレーターに追加の引数を渡すにはどうすればよいですか?
以下のようなデコレータがあります。 def myDecorator(test_func): return callSomeWrapper(test_func) def callSomeWrapper(test_func): return test_func @myDecorator def someFunc(): print 'hello' このデコレータを拡張して、以下のような別の引数を受け入れたい def myDecorator(test_func,logIt): if logIt: print "Calling Function: " + test_func.__name__ return callSomeWrapper(test_func) @myDecorator(False) def someFunc(): print 'Hello' しかし、このコードはエラーを出します、 TypeError:myDecorator()は2つの引数を取ります(1つが指定されています) 関数が自動的に渡されないのはなぜですか?関数をデコレータ関数に明示的に渡すにはどうすればよいですか?

5
デコレータでPython関数定義をバイパスする方法は?
グローバル設定(OSなど)に基づいてPython関数定義を制御できるかどうかを知りたいです。例: @linux def my_callback(*args, **kwargs): print("Doing something @ Linux") return @windows def my_callback(*args, **kwargs): print("Doing something @ Windows") return 次に、誰かがLinuxを使用している場合、最初の定義my_callbackが使用され、2番目の定義は黙って無視されます。 OSを決定することではなく、関数定義/デコレータについてです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.