0

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

Data.ServerNow.Property().DefaultChart

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

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

dictPlistdictとまったく同じように見えます。しかし、私が言うとき

print TextNow.Data().Name

エラーが発生します

 'dict' object has no attribute 'Name'

しかし、私が言うなら

print TextNow.Data()['Name']

突然動作します!

誰かがこの振る舞いを説明できますか?dictをXML風のdictに変換する方法はありますか?

4

2 に答える 2

2

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

于 2009-09-16T08:51:00.123 に答える
1

getattr redefinitionを使用して、辞書キーを属性として扱うことができます。例:

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がある場合:

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'
于 2009-09-16T09:05:03.640 に答える