私は現在、私のプロジェクトで ConfigObj を使用して、構造化テキスト ベースの構成ファイルを作成しています。それが返すデータ構造は通常の dict 型であり、私の場合、他の多くの dict を値として含むことができ、それ自体が dict を含むことができます。ドット表記でアイテムを再帰的に取得する getattr のようなものを実装するために、メイン dict をクラスでラップする最も Pythonic な方法を探しています。このようなもの:
class MyDict(dict):
def __init__(self, **kwargs):
self.d = dict(kwargs)
def __getattr__(self, key, default=None):
try:
return self.d[key]
except AttributeError:
print "no-oh!"
return default
残念ながら、これはレイヤ 1 までしか機能しません。私が呼び出しているキーの値も L2 dict であり、再帰的に内部レイヤーにある場合、実際にはこれを再帰的にしたいと思います。
この種の呼び出しのようなもの:
foo = MyDict(super_very_complex_nested_dict)
x = foo.a1
y = foo.a2.b1 #a2 is a dict value
z = foo.a2.b2.c1 #a2 and b2 are dict values
これを行うための賢明な方法は何でしょうか?
編集:私の質問は、提案された複製とは少し異なります。通常の辞書にgetattrを使用する方法を知っています。ネストされた辞書に使用する方法を知りたいです。ナイーブな質問ではないと思います。