【发布时间】:2014-11-30 21:53:13
【问题描述】:
我正在编写一个类来存储我最终想要序列化/反序列化到磁盘的数据。此类的任何对象都可以明确表示为包含存储在对象属性中的数据的字典。因此,序列化和反序列化相当于将对象转换为字典表示(或使用字典表示初始化新对象),然后使用 json.dump()、json.read() 等对字典进行序列化/反序列化。
调用obj.__dict__ 是不可接受的,因为我使用@property 装饰器包装公共属性以构建一次写入功能,并将实际值存储在非公共变量中,例如_attribute。因此,调用 obj.__dict__ 会返回一个字典,其中包含像“_attribute”这样的键,这不是我想要的。
构建这样一个类的“正确”方法是什么?我应该有一个obj.to_dict() 方法(可能是非公开的),还是编写一个使dict(obj) 有效的类?扩展这个问题,我应该有一个obj.json_dumps() 方法,还是编写一个使json.dumps(obj) 有效的类?
我最初的想法是使用__repr__ 方法来创建对象的dict 表示,然后返回dict 的字符串表示,但似乎这种方法需要太多步骤。根据之前的stackoverflow question,__repr__ 应该是对象的明确表示,所以我很高兴__repr__ 返回 dict 的字符串表示,但转换 dict -> str -> dict 似乎不是- 最佳方式。
我试图避免糟糕的架构模式,并且我还希望拥有尽可能通用的架构,以便将来可以轻松实现其他类型的序列化,例如 yaml 或 pickle。
【问题讨论】:
-
为什么不现在就使用
pickle?
标签: python serialization dictionary