我想重用别人写的一些代码。
代码是对象数组及其属性的长迭代。数据来自内置函数。
我通过ajax(作为JSON)提供相同的数据结构,因此python(web2py)将其转换为dict。
为了不断使用相同的长代码,我需要一种方法将当前元素从字典转换为对象。
原因:属性写为Obj.prop
而不是Obj["prop"]
。
怎么做?
答案 0 :(得分:5)
class ObjectDict(dict):
"""
Object like dict, every dict[key] can be visited by dict.key
"""
def __getattr__(self, name):
return self.__getitem__(name)
答案 1 :(得分:3)
web2py包含具有此行为的Storage
类。
from gluon.storage import Storage
mystorage = Storage(dict(key1=1, key2=2))
mystorage.key1
一些web2py API对象是Storage
个对象(例如request
,response
,session
)。
答案 2 :(得分:2)
有一个包正是这个叫做attrdict(我正在使用它没有任何问题): https://pypi.python.org/pypi/attrdict/1.2.0
示例(从attrdict doc复制):
>>> from attrdict import AttrDict
>>> a = AttrDict({'foo': 'bar'})
>>> a.foo
'bar'
>>> a['foo']
'bar'
使用它的一个好处是,不平坦的字典也可以工作(只要你总是通过属性访问,而不是使用标准的dict语法):
>>> a = AttrDict({'foo': {'bar': 'baz'}})
>>> a.foo.bar
'baz'
答案 3 :(得分:1)
使用Bunch类。周围有各种食谱,pydanny's看起来不错。