将python对象转换为DICT和其他序列化的一般方法

将python对象转换为DICT和其他序列化的一般方法,python,serialization,dictionary,Python,Serialization,Dictionary,我正在编写一个类来存储我最终想要序列化/反序列化到磁盘或从磁盘中读取的数据。此类的任何对象都可以明确地表示为包含对象属性中存储的数据的字典。因此,序列化和反序列化相当于将对象转换为字典表示(或使用字典表示初始化新对象),然后使用类似于json.dump()、json.read()的内容序列化/反序列化dict 调用obj.\uuu dict\uuu是不可接受的,因为我正在用@property装饰器包装公共属性,以构建一次写入功能,并将实际值存储在非公共变量中,如\u attribute。因此,调

我正在编写一个类来存储我最终想要序列化/反序列化到磁盘或从磁盘中读取的数据。此类的任何对象都可以明确地表示为包含对象属性中存储的数据的字典。因此,序列化和反序列化相当于将对象转换为字典表示(或使用字典表示初始化新对象),然后使用类似于json.dump()、json.read()的内容序列化/反序列化dict

调用
obj.\uuu dict\uuu
是不可接受的,因为我正在用
@property
装饰器包装公共属性,以构建一次写入功能,并将实际值存储在非公共变量中,如
\u attribute
。因此,调用
obj.\uuuu dict\uuu
会返回一个字典,其中包含“\u attribute”之类的键,这不是我想要的

构建这样一个类的“正确”方式是什么?我应该有一个
obj.to_dict()
方法(可能是非公共的),还是编写类使
dict(obj)
工作?扩展这个问题,我应该有一个
obj.json\u dumps()
方法,还是编写类使
json.dumps(obj)
工作

我最初的想法是使用
方法创建对象的dict表示,然后返回dict的字符串表示,但这种方法似乎需要太多步骤。根据前面的一篇文章,
\uuuuuuu repr\uuuuuu
应该是对象的明确表示,因此我很高兴
\uuuuuuuu repr\uuuu
返回dict的字符串表示形式,但转换dict->str->dict似乎不是最佳的方法


我正试图避免一个糟糕的体系结构模式,我也希望有一个最通用的体系结构,这样我就可以在将来实现一些其他类型的序列化,比如yaml或pickle。

我可能理解错了,但是,你考虑过了吗

另一个选项可能是模块


为什么不现在就使用pickle呢?我已经考虑过json和pickle。我的问题是:什么是最具蟒蛇式的做事方式?我是否应该编写与这些模块兼容的类,或者我的类是否应该有类似的方法,例如,
obj.json\u dump()
。。。您需要如何编写类才能与JSON“兼容”?我只需编写一个方法“save(file)”(或类似方法),在self上调用json.dump,另一个方法“read(file)”,在文件上调用json.load。
with open(output_file, 'w') as ff:
      json.dump(obj, ff)
with open(output_file) as ff:
      obj = json.load(ff)
with open("mierda.txt", 'w') as ff:
     pickle.dump(a, ff)
with open("mierda.txt") as ff: 
     obj = pickle.load(ff)