2009-09-16 11 views
0

私はplist(XML)ファイルを読み込んでdictを返すモジュールIにクラスを持っています。私のような何かを言うことができるので、これは非常に便利です:dictのPlist項目へのアクセス

Data.ServerNow.Property().DefaultChart 

これは、プロパティ辞書、DefaultChartのための特別の値を返します。非常にエレガント。 しかし、この方法が失敗した辞書を組み立てる:

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

dictは正確にPLISTの辞書のように見えます。 しかし、私は

print TextNow.Data().Name 

を言うとき、私は、エラー

'dict' object has no attribute 'Name' 

を取得しかし、私は

print TextNow.Data()['Name'] 

を言うならば、突然、それは働きます!

誰かがこの現象を説明できますか? dictをXML-ish dictに変換する方法はありますか?

答えて

1

あなたは属性として、辞書のキー、たとえばを治療するためのGETATTR再定義を使用することができます

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

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

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

は、あなたがそうすることができます:

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の次ています場合:

+0

ありがとうございました。それは、plistを書いてそのファイルをdictにロードする方が簡単だったことが分かりました。 – Gnarlodious

関連する問題