TurboGearsいじってたら、@exposeってのがあって、なんじゃろかーって初めてのpythonみたけど載ってなかった。
いろいろ、キーワード突っ込んでググってみたらやっとわかった。
IBM 魅力的な Python: デコレーターで魔法を身近に - Japan
最近ではバージョン 2.4 で「デコレーター (修飾子)」が拡張されています。デコレーターは、大抵のメタプログラミングを行う際の最新かつ、とびきりユーザー・フレンドリーな手段になります。
@expose("tgcommerce.templates.category") def index(self):
はCatalystでいう
$c->stash->{template} = ... sub end : ActionClass('RenderView') {}
と似たようなもんなのか。
デコレータとは、GoFのデザインパターンにある名前のやつと同じく なにかを修飾する機能を持つものです。pythonの場合は、 デコレート対象が関数およびメソッドになります。
あー、だから最初関数合成とかいう記述がみつかったのか。
関数合成みたいに考えると、MVCってCっていう関数でMをいじってVって関数でラップするって考えてもいいのか。
V(C(M))
みたいに。haskellだと
V . C . M
な感じになってんのかな。