在Python中,有没有办法在使用__slots__的对象上使用json.dumps?

时间:2014-08-27 18:50:18

标签: python json cpython

当我尝试在使用json.dumps的类的对象上使用__slots__时,我得到“...不是JSON可序列化的”,或者AttributeError __dict__ __slots__ 1}}丢失了。我怎样才能让它发挥作用?似乎import json class Foo: __slots__ = ["bar"] def __init__(self): self.bar = 0 json.dumps(Foo()) 应该告诉解释器使用虚拟字典来兼容。

{{1}}

1 个答案:

答案 0 :(得分:2)

简单,vanilla json.dumps()不支持自定义类,句点。如果他们在这里使用__slots__无关紧要。

处理自定义类的一种流行方法是使用一个返回其__dict__属性的钩子,这显然在这里不起作用。你必须找到另一种方法来序列化这些对象。

这种对象有一种方法可以使用专用方法:

class Foo:
     __slots__ = ["bar"]
     def __init__(self):
         self.bar = 0

     def json_serialize(self):
         return {'bar': self.bar}

并在default钩子中使用它:

json.dumps(Foo(), default=lambda o: o.json_serialize())
相关问题