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. の例が参考になった(それより難しいと思われる他の例は未だ理解できず)。
イベントハンドラーなんかで、決まった前処理をする場合に便利かなぁ。
(↑こういう場合に使ってみた)
でも、デコレーター使う場合と使わない場合で、使うほうがより良いソースコードになったかどうかは微妙だ。全体として行数は短くなったけど、ソースの見通しが良くなっているわけではない。デコレーターで変なことをしてるとはまりそう。
デコレーターは作るものじゃなくて、(頭のいい人が作ったフレームワークに装備されてる奴を)使うもんだな、と思った。
やっぱり、難しいですよね。僕だけじゃなかったんだ!
使う分にはみやすくなって便利です。作るとなると、なれるまでかなり時間がかかりそう。
でもって、僕が書き散らかしたやつを他の人にメンテナンスしてと頼めない。ちなみにリスト内包も初心者にはメンテナンスしてもらえない。
by liris (2007-03-23 11:59)
単なる syntax sugar で、デコレーターがなくても同じことができるのであれば、無理して導入する必要はなかった気がします。
新しい機能が追加されたら、使わずにはいられない liris さんのような人を混乱させないためにも。
2.5 で導入された with も try: ~ except: ~ finally: があれば、なくてもいいような気がするし・・・
by nakagami (2007-03-23 12:59)