2

私は現在、私のプロジェクトで 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を使用する方法を知っています。ネストされた辞書に使用する方法を知りたいです。ナイーブな質問ではないと思います。

4

1 に答える 1