作者: Fe2+
日時: 2005/1/15(20:29)
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)