Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,有没有一种方法可以在使用_插槽的对象上使用json.dumps?_Python_Json_Cpython - Fatal编程技术网

在Python中,有没有一种方法可以在使用_插槽的对象上使用json.dumps?

在Python中,有没有一种方法可以在使用_插槽的对象上使用json.dumps?,python,json,cpython,Python,Json,Cpython,当我尝试在使用\uuuu slots\uuuu的类的对象上使用json.dumps时,我得到“…json不可序列化”,或者可能是缺少\uuu dict\uuuu的属性错误。我怎样才能让它工作?似乎\uuuuuuuuuuuuuuuuuuuuuuuuuuu应该告诉解释器使用虚拟字典以实现兼容性 import json class Foo: __slots__ = ["bar"] def __init__(self): self.bar = 0 json.du

当我尝试在使用
\uuuu slots\uuuu
的类的对象上使用
json.dumps
时,我得到“…json不可序列化”,或者可能是缺少
\uuu dict\uuuu
属性错误。我怎样才能让它工作?似乎
\uuuuuuuuuuuuuuuuuuuuuuuuuuu
应该告诉解释器使用虚拟字典以实现兼容性

import json

class Foo:
     __slots__ = ["bar"]
     def __init__(self):
         self.bar = 0

json.dumps(Foo())

普通的
json.dumps()
不支持自定义类,句号。不管他们是否在这里使用
\uuuuu插槽

处理自定义类的一种流行方法是使用一个钩子来返回它们的
\uuuu dict\uuuu
属性,而这显然在这里不起作用。您必须找到另一种方法来序列化这些对象

一种方法是让这些对象有一个专用的方法:

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())

在没有
的对象上也无法执行此操作。是什么让你认为它能在其他对象上工作?你可能会发现这个问题很有帮助。如果你想序列化一个对象,你需要使用
pickle
。@MartijnPieters:看起来我实际上在做
json.dumps(Foo(),default=lambda o:o.u dict\uuu)
,但我在写我的问题时忘记了这一点。@Vor:我需要一个序列化,它将在Python之外工作,并且是人类可读的<代码>pickle
在Python之外无法工作,如果类定义发生更改,Python内部甚至会出现问题。