モジュールの動作を模倣して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__