Fe2+ です。
At Sat, 15 Jan 2005 15:50:42 +0900,
機械伯爵 wrote:
> Pythonのデコレータ書式の基本形(これが決まるまで
> モメにモメたらしい・・・ここらへんはFe2+さんのほう
> が詳しいでしょうけど・・・)自体が・・・
別に詳しくは…。
> @deco
> def func(arg):
> ...
>
> が、
>
> def func(arg):
> ...
> func = deco(func(arg))
>
> に単純に置き換えられるだけのものです(・・・って、
> 言い切っていいのかしら?)
これだと、値を修飾してしまいますね。
元々、classmethod や staticmethod が 2.2 から登場して、
(「初めてのPython 第2版」では23章に説明があります)
class Hoge:
def hoge(arg):
...
hoge = staticmethod(hoge)
とか書いていたのを、
「いくらなんでもこれでは不格好だからどうにかしようよ」
「そうだ、一般化してデコレータを文法に導入しよう!」
という話になったものなので(多分)、
class Hoge:
@staticmethod
def hoge(arg):
...
という使い方が、一番真っ当なデコレータの使い方のはずです。で、結局意味
としては元の書き方と同じ、と。当然の帰結としてデコレータは関数を引数に
貰って関数を返す関数でなきゃいけないわけですね。
--
MATSUI Fe2+ Tetsushi
http://homepage3.nifty.com/text/
(http://lowlife.jp/mft/ for blog)