2014-12-28 44 views
2

我想重用其他人編寫的某些代碼。將字典轉換爲對象(或複製到本地對象var)

該代碼是對對象數組及其屬性的長迭代。數據來自內置函數。

我通過ajax(如JSON)提供了相同的數據結構,因此python(web2py)將其轉換爲字典。

爲了不斷使用相同的長代碼,我需要一種方法將當前元素從字典轉換爲對象。

原因:該屬性被寫爲Obj.prop,並且不是Obj["prop"]

怎麼辦?

回答

5
class ObjectDict(dict): 
    """ 
    Object like dict, every dict[key] can be visited by dict.key 
    """ 

    def __getattr__(self, name): 
     return self.__getitem__(name) 
+0

請注意,web2py已經包含['Storage' class](http://stackoverflow.com/a/27681083/440323),它可以做到這一點。 – Anthony

1

使用Bunch類。有各種各樣的食譜,pydanny's看起來不錯。

2

有所做的正是這家名爲attrdict(我使用它沒有任何問題)的包: https://pypi.python.org/pypi/attrdict/1.2.0

例(從attrdict文檔複製):

>>> from attrdict import AttrDict 
>>> a = AttrDict({'foo': 'bar'}) 
>>> a.foo 
'bar' 
>>> a['foo'] 
'bar' 

一個好處是用這種是不平坦的字典也工作(只要你總是訪問的財產,而不是與標準的字典語法):

>>> a = AttrDict({'foo': {'bar': 'baz'}}) 
>>> a.foo.bar 
'baz' 
3

web2py包含具有此行爲的Storage類。

from gluon.storage import Storage 
mystorage = Storage(dict(key1=1, key2=2)) 
mystorage.key1 

若干web2py的API對象是Storage對象(例如,requestresponsesession)。