[英]In Python, is there a way to use json.dumps on an object that uses __slots__?
当我尝试在使用__slots__
的类的对象上使用json.dumps
,出现“ ...不是JSON可序列化的”,或者可能是__dict__
缺失的AttributeError
。 我该如何工作? 似乎__slots__
应该告诉解释器使用虚拟字典来实现兼容性。
import json
class Foo:
__slots__ = ["bar"]
def __init__(self):
self.bar = 0
json.dumps(Foo())
普通的香草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())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.