2008-09-04から1日間の記事一覧

デコレータ

デコレータはPython2.4から導入。 class X: @classmethod def foo(): pass この@から始まるのがデコレータで、上の例だとfooメソッドをクラスメソッドにしている。Java1.5のアノテーションによく似ているが、だからといってこういう特殊な用途のための構文と…

クラスメソッド、スタティックメソッド

クラスメソッドとスタティックメソッドの書き方 class X: def foo(cls): print 'foo' def bar(): print 'bar' foo = classmethod(foo) bar = staticmethod(bar) X.foo() X.bar() クラスメソッドはRubyと同じく普通にクラスメソッドで、第一引数にはselfの代…

ブロックの始まり

本やマニュアルでは特に言及されていないようだけど、インデントを始める前の行末には必ず:(コロン)がある。ifでもtryでもそう。コロンがあるならブロックが始まるし、ブロックが欲しいならコロンの付く文を書けばいいわけだ。たぶん構文解析でコロンを目印…

with

Python2.5から導入されたwith。これはDelphiやVisualBasicのwithみたいにブロック内でレシーバを省略できるようになるわけではなく、Rubyでopenをブロック付きで呼び出したみたいに自動でcloseなどの後始末をするための構文。C++ならスマートポインタみたい…