2016-10-13 3 views

答えて

3

デコレータは場合引数として関数を取り、別の値(ないnecessarly関数)を用いてオブジェクトのフィールドの値を置き換える=機能

モンキーパッチを返す関数

を=機能の猿のパッチは、デコレータを介して実行することができます。ですから、私はデコレータが猿のパッチの一例と考えられるかもしれないと思います。しかし、一般的にサルのパッチ適用とは、第三者のライブラリの動作を変更することです。その場合、デコレータはそれほど有用ではありません。

2

いくつかの文法レベルでは、それらは同等かもしれません。しかし、デコレータは関数またはクラスが定義された時点で適用され、実行時にオブジェクトを変更することにより、精神的にも実際の使用においても非常に異なったものになります。

+0

Pythonデコレータは、実行時に適用されます。関数/クラスも実行時に "定義"されます。実際には、構文チェックもすべて実行時に行われます。 – freakish

+0

@ブライアンあなたがモンキーパッチが "オブジェクトを変更する"と言うなら、デコレータも関数を変更し、関数はPythonのオブジェクトです。これは正しいと言えるでしょうか? – Kishan

+1

@soupboy:デコレータは関数を変更しないので、関数を引数として受け取り、別の関数を返します。元の機能は変更されていません。プログラマーの観点からは、元の関数が変更された場合と同じかそれ以上の差があるため、「文法レベルで」同じと見なすことができると言われています。 –