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

标签 python json cpython

当我尝试使用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/

相关文章:

python - 将句子中的单词长度映射到单词列表

python - 通过 scipy.io.loadmat 将 matlab 3D 矩阵传输到 python 3D 数组会出错

c++ - CPython 是字节码解释器吗?

python - split() 将哪些字符视为空格?

python - 使用 Windows 10 将 Python 包上传到 Pypi 时出现问题 - twine 未被识别为内部或外部命令

python - 从函数返回多个值的最佳方法?

javascript - 使用 jQuery 读取 CSV 文件

json - Grails:从请求中解析 JSON 的简单有效的方法

json - Spring REST - 字符串序列化 - 错误还是功能?

python - 在早期的 Python 中重现 Python 3.3 __qualname__ 的效果