モジュールの動作を模倣してConfigParser
、使用する特定のアプリケーションの構成ファイル内の明確に定義された構造を活用する、高度に専門化されたパーサーを作成しています。ファイルは、標準の INI 構造に従います。
[SectionA]
key1=value1
key2=value2
[SectionB]
key3=value3
key4=value4
私のアプリケーションでは、セクションはほとんど関係ありません。異なるセクションのキー間に重複はなく、すべてのユーザーはキー名のみを覚えており、どのセクションに入る必要があるかは決して覚えていません。そのため、オーバーライド__getattr__
し__setattr__
て、MyParser
作成しているクラスでショートカットを許可したいと思いますこのような:
config = MyParser('myfile.cfg')
config.key2 = 'foo'
この__setattr__
メソッドは、最初に呼び出されたセクションを見つけようとし、key2
存在する場合はそれを「foo」に設定します。そのようなセクションがないと仮定すると、各セクション内で というキーが検索されますkey2
。キーが存在する場合は、新しい値に設定されます。存在しない場合、パーサーは最終的に. を発生させAttributeError
ます。
これのテスト実装を作成しましたが、問題は、この動作から除外されたいくつかのストレートアップ属性も必要であることです。config.filename
元のファイルの名前を含む単純な文字列にconfig.content
なり、各セクションの辞書を保持する辞書になりたいです。
カスタムゲッターとセッターによって見過ごされないように、コンストラクターで属性filename
と属性を設定するクリーンな方法はありますか? custom を呼び出す前content
に、python はオブジェクトの属性を探しますか?__dict__
__setattr__