我想重用其他人編寫的某些代碼。將字典轉換爲對象(或複製到本地對象var)
該代碼是對對象數組及其屬性的長迭代。數據來自內置函數。
我通過ajax(如JSON)提供了相同的數據結構,因此python(web2py)將其轉換爲字典。
爲了不斷使用相同的長代碼,我需要一種方法將當前元素從字典轉換爲對象。
原因:該屬性被寫爲Obj.prop
,並且不是Obj["prop"]
。
怎麼辦?
我想重用其他人編寫的某些代碼。將字典轉換爲對象(或複製到本地對象var)
該代碼是對對象數組及其屬性的長迭代。數據來自內置函數。
我通過ajax(如JSON)提供了相同的數據結構,因此python(web2py)將其轉換爲字典。
爲了不斷使用相同的長代碼,我需要一種方法將當前元素從字典轉換爲對象。
原因:該屬性被寫爲Obj.prop
,並且不是Obj["prop"]
。
怎麼辦?
class ObjectDict(dict):
"""
Object like dict, every dict[key] can be visited by dict.key
"""
def __getattr__(self, name):
return self.__getitem__(name)
使用Bunch類。有各種各樣的食譜,pydanny's看起來不錯。
有所做的正是這家名爲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'
web2py包含具有此行爲的Storage
類。
from gluon.storage import Storage
mystorage = Storage(dict(key1=1, key2=2))
mystorage.key1
若干web2py的API對象是Storage
對象(例如,request
,response
,session
)。
請注意,web2py已經包含['Storage' class](http://stackoverflow.com/a/27681083/440323),它可以做到這一點。 – Anthony