我目前有一个词典,其中:
one_result = {'name':'Acme', 'description': 'Fun time',
'results': {'fun_status': 'Extra', 'fun_title': 'Foo' }
}
我在代码中的许多地方访问此dict的值,并将许多结果放在数组中并将其存储在DB中:
class Record(models.Model):
results = JSONField(default=[], null=True, blank=True)
我想保留DRY并从结果中创建一个Python对象,因此我可以直接访问属性,而不是通过key_names: result.name VS result ['name']
有没有办法可以创建一个由dict()支持的对象,并且可以在我的db中轻松地序列化/反序列化为JSON?
答案 0 :(得分:2)
一个简单的解决方案是直接添加self.__dict__
:
class Foo():
def __init__(self, d):
for k, i in d.items():
if isinstance(i, dict):
self.__dict__[k] = Foo(i)
else:
self.__dict__[k] = i
测试案例
f = Foo({"a": "b", "c": {"d": "e"}, "f": ["g", "h", "i"]})
f.a
# 'b'
f.c
# <__main__.Foo at 0x1624c5c0>
f.c.d
# 'e'
f.f
# ['g', 'h', 'i']