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