为何继承dict的数据类经json.dumps序列化后得到空字典?
为什么继承dict的dataclass序列化后得到'{}'
原因核心在于json模块的序列化逻辑,以及dataclass结合dict子类的属性存储方式:
- json.dumps处理对象时会优先识别类型:因为
Foo类继承了dict,json会把它当作普通字典来处理,直接遍历其内部的键值对生成JSON。 - dataclass给
Foo定义的bar字段,是作为实例的属性存在于实例的__dict__中,并没有被添加到Foo继承自dict的键值对集合里。你实例化Foo(bar={'spam': 'eggs'})后,bar只是实例的一个属性,并非字典的键,所以json遍历这个"字典"时内部是空的,最终输出'{}'。
你可以通过以下代码直观验证:
print(example.bar) # 输出 {'spam': 'eggs'},证明属性存在 print(list(example.keys())) # 输出 [],证明字典内无键值对
内容的提问来源于stack exchange,提问作者Alexander McFarlane
相关产品推荐
相关产品推荐

