繁体   English   中英

在Python中,是否可以在使用__slots__的对象上使用json.dumps?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM