如何在python中使用dict创建对象?

时间:2018-02-14 14:48:12

标签: python django

我目前有一个词典,其中:

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?

1 个答案:

答案 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']