Python Code Reading 03 後
StringIO が予想以上におもしろかった一日。その後の懇親会もすごく楽しくていろいろ書きたいことあったはずなんだけど、 04 で発表側に回ることになって全部吹き飛んだ。お、お、お、おちつけオレ!?
とりあえず題材になりそうなモジュールを探そう。柴田さんからすすめられたのは string.Template と inspect の2つ。そのほか fileinput など自分で心当たりのあるモジュールにもあたってみる。それぞれ 10分ほど眺めてわかったことをメモ。
- string.Template クラスメモ
- string.Template は旧スタイルクラス
- __metaclass__ がでてくる(楽しめるポイントその1
- string._TemplateMetaclass で正規表現オブジェクトを構築、クラスの pattern 属性に入れる
- string.Template.substitute メソッドでは「いろいろ」処理して(楽しめるポイントその2
- 最後に string.Template.pattern.sub メソッドで文字列置換
- stringTemplate は継承してオリジナルのテンプレートクラスを作れる、そのときクラス属性をオーバーライドするだけでほぼ OK となる仕掛けについて(楽しめるポイントその3
- inspect モジュールメモ
- 開幕は isinstance(object, typesのなにか) を呼ぶショートカット関数がならぶ。 types モジュールについても詳しくなれそうな部分
- 200行越えたあたりから __dict__ など system-defined である属性へのアクセスが登場。 Python の裏側の世界へ(楽しめるポイント
- と思ったら getcomments のような文字列処理中心の部分もある、気が抜けない
- 関数から同じモジュールの他の関数を呼ぶ率高め。これらの連携に注目 (例:getsourcefile が getfile を呼ぶ)
- (きれいなコード。徹底して関数のコードを1画面程度に収めていることや、適切なコメントなどにも注目)
- fileinput モジュールメモ
- まさかのファイルライクオブジェクト。 Python Code Reading 03 の宿題その2への解のひとつ発見
- ファイルライクオブジェクトなので当然 ファイルオブジェクトや StringIO と同様のメソッドを持つ
- FileInput.nextfile メソッドで次のファイルを読む。標準出力 sys.stdout をすりかえてみたりバックアップファイルを処理したり
- __iter__ で自身を返し、自分自身が next メソッドも持つタイプ
- Python 2.5 より openhook が追加、圧縮ファイルを透過的に扱ったり文字エンコーディングを切り替えつつ読んだり自作の処理をはさんだりできる
- あとは__init__ と readline メソッド
- optparse モジュールメモ
- 口走ってはみたもののコードリーディングには長くて不向きっぽい
- どうしてもやるなら OptionParser クラスより Option クラスか?
- linecache モジュールメモ
- cache 辞書に更新時刻も詰め込んでおく。時刻は updatecache 時に使用
- traceback モジュールメモ
- linecache 使用
- トレースバックオブジェクトについて知ることができる、詳しくなれる
10分じゃなくて 1時間以上読めば、また違ったものが見えてくるはず・・・。