当我尝试使用json.dumps
时在使用 __slots__
的类的对象上,我得到“...不是 JSON 可序列化”,或者可能是 AttributeError
那__dict__
不见了。我怎样才能让它发挥作用?看来__slots__
应该告诉解释器使用虚拟字典来实现兼容性。
import json
class Foo:
__slots__ = ["bar"]
def __init__(self):
self.bar = 0
json.dumps(Foo())
最佳答案
普通的普通 json.dumps()
不支持自定义类,句号。他们是否使用 __slots__
并不重要。
处理自定义类的一种流行方法是使用返回其 __dict__
属性的 Hook ,这显然在这里不起作用。您必须找到另一种方法来序列化此类对象。
一种方法是让此类对象拥有专用方法:
class Foo:
__slots__ = ["bar"]
def __init__(self):
self.bar = 0
def json_serialize(self):
return {'bar': self.bar}
并在您的default
Hook 中使用它:
json.dumps(Foo(), default=lambda o: o.json_serialize())
关于python - 在Python中,有没有办法在使用__slots__的对象上使用json.dumps?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25534872/