You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么json.dumps序列化Python对象时会忽略类全局初始化的变量?

现象原因解释

Python 的类属性和实例属性是独立存储的,你用到的实例__dict__只存储实例自身独有的属性,不会包含继承自类的公共属性:

  • 你在类定义中声明的name = "Test"属于TestObject的类公共属性,存储在类本身的属性字典TestObject.__dict__里,所有未单独赋值name的实例都会共享这个值。你直接访问tObj.name时,Python 会按「实例属性→类属性→父类属性」的顺序向上查找,所以能正常读到值,但这个属性并不属于实例本身,自然不会出现在tObj.__dict__中,序列化结果就是空对象。
  • 当你执行tObj.name = "Test"赋值操作时,相当于给当前实例单独创建了一个同名的独有属性,这个属性会被写入实例的__dict__中,序列化的时候就能正常输出{"name": "Test"}。

如果需要同时序列化类属性和实例属性,可以自己拼接属性字典,示例如下:

# 过滤掉类的魔法属性,合并类属性和实例属性后序列化
class_attrs = {k:v for k,v in TestObject.__dict__.items() if not k.startswith('_')}
instance_attrs = tObj.__dict__
out = json.dumps(class_attrs | instance_attrs)

内容的提问来源于stack exchange,提问作者lehli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:45:02