質問

モジュールIにplist(XML)ファイルを読み取り、dictを返すクラスがあります。私は次のように言うことができるので、これは非常に便利です。

Data.ServerNow.Property().DefaultChart

これは、プロパティディクショナリ、具体的には DefaultChart の値を返します。とてもエレガント。 ただし、この方法で辞書を作成すると失敗します。

dict={'Data': 'text1', 'Name':'text2', 'Place':'text3]}

dict は、Plist dictとまったく同じです。 しかし、私が言うとき

print TextNow.Data().Name

エラーが発生しました

 'dict' object has no attribute 'Name'

しかし、私が言うなら

print TextNow.Data()['Name']

突然動作します!

誰かがこの動作を説明できますか?辞書をXML風の辞書に変換する方法はありますか?

役に立ちましたか?

解決

getattr再定義を使用して、ディクショナリキーを属性として扱うことができます。例:

class xmldict(dict):
    def __getattr__(self, attr):
        try:
            return object.__getattribute__(self, attr)
        except AttributeError:
            if attr in self:
                return self[attr]
            else:
                raise

したがって、たとえば次のような辞書がある場合:

dict_ = {'a':'some text'}

次の操作を実行できます。

>> print xmldict(dict_).a
some text
>> print xmldict(dict_).NonExistent
Traceback (most recent call last):
  ...
AttributeError: 'xmldict' object has no attribute 'NonExistent'

他のヒント

ドット演算子はPython辞書の適切なアクセサー構文ではないため、機能しません。データ構造のデータメンバーにアクセスするのではなく、オブジェクトとして扱い、プロパティにアクセスしようとしています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top