SSブログ

Python のデコレーター [Python]

Python 2.4 で導入されたデコレーター。
解説を見てもよくわからん、classmethod なんか使わんし・・・
http://www.itmedia.co.jp/enterprise/articles/0501/24/news034_3.html
デコレーターが、classmethod のためだけにあるわけじゃないだろうし、
使い道もあるんだろうけど・・・と思いながらずっと放置してた。

liris さんが思い出したようなので(って↓もう1ヶ月も前!)
http://www.liris.org/blog/E6809DE38184E587BAE38197E3819FE38288E38186E381ABE38387E382B3E383ACE383BCE382BF/
思い直して、僕もデコレーターを使うように頑張ってみた。

「魅力的な Python: デコレーターで魔法を身近に」
http://www-06.ibm.com/jp/developerworks/linux/library/l-cpdecor.shtml
のリスト 7. の例が参考になった(それより難しいと思われる他の例は未だ理解できず)。

イベントハンドラーなんかで、決まった前処理をする場合に便利かなぁ。
(↑こういう場合に使ってみた)
でも、デコレーター使う場合と使わない場合で、使うほうがより良いソースコードになったかどうかは微妙だ。全体として行数は短くなったけど、ソースの見通しが良くなっているわけではない。デコレーターで変なことをしてるとはまりそう。

デコレーターは作るものじゃなくて、(頭のいい人が作ったフレームワークに装備されてる奴を)使うもんだな、と思った。


nice!(0)  コメント(2)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 2

liris

やっぱり、難しいですよね。僕だけじゃなかったんだ!
使う分にはみやすくなって便利です。作るとなると、なれるまでかなり時間がかかりそう。
でもって、僕が書き散らかしたやつを他の人にメンテナンスしてと頼めない。ちなみにリスト内包も初心者にはメンテナンスしてもらえない。
by liris (2007-03-23 11:59) 

nakagami

単なる syntax sugar で、デコレーターがなくても同じことができるのであれば、無理して導入する必要はなかった気がします。
新しい機能が追加されたら、使わずにはいられない liris さんのような人を混乱させないためにも。

2.5 で導入された with も try: ~ except: ~ finally: があれば、なくてもいいような気がするし・・・
by nakagami (2007-03-23 12:59) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0