最初にいくつかの背景。単純なファイル形式を解析していて、後でPythonコードで結果を再利用したいので、非常に単純なクラス階層を作成し、作業中のテキストファイルの元のレコードからオブジェクトを構築するパーサーを作成しました。 。
同時に、データをレガシーデータベースにロードしたいと思います。このデータベースのローダーファイルは、単純なタブ区切り形式を採用しています。最も簡単な方法は、次のようなことを行うことです。
print "{0}\t{1}\t....".format(record.id, record.attr1, len(record.attr1), ...)
Template
ただし、印刷する列が非常に多いため、クラスを使用して、何が何であるかを少し簡単に確認できるようにすると思いました。
templ = Template("$id\t$attr1\t$attr1_len\t...")
substitute
そして、呼び出しで使用されるマップの代わりに、派生値のいくつかの追加キーワードを使用して、レコードを使用できると考えました。
print templ.substitute(record, attr1_len=len(record.attr1), ...)
残念ながら、これは失敗し、レコードインスタンスに属性がないことを訴えます__getitem__
。
だから私の質問は2つあります:
- 実装する必要がありますか?実装
__getitem__
する場合はどうすればよいですか? - 名前をすでに知っている一連の属性を出力するだけでよい、このようなもののよりエレガントな方法はありますか?