dict内のPlistアイテムへのアクセス
-
07-07-2019 - |
質問
モジュール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辞書の適切なアクセサー構文ではないため、機能しません。データ構造のデータメンバーにアクセスするのではなく、オブジェクトとして扱い、プロパティにアクセスしようとしています。
所属していません StackOverflow