python中与格式无关的序列化
我最近在寻找序列化python类的方法,只找到了一些涉及特定格式库的主题,如python中与格式无关的序列化,python,serialization,Python,Serialization,我最近在寻找序列化python类的方法,只找到了一些涉及特定格式库的主题,如pickle和json。有没有一种方法可以使python类在不提交具体格式的情况下可序列化 更具体的是:当C++编程时,我经常使用Boost序列化库。在那里,您可以通过实现serialize方法来添加类Foo的序列化: struct Foo { int some_number; std::string some_string; } template <typename Archive> vo
pickle
和json
。有没有一种方法可以使python类在不提交具体格式的情况下可序列化
更具体的是:当C++编程时,我经常使用Boost序列化库。在那里,您可以通过实现
serialize
方法来添加类Foo
的序列化:
struct Foo
{
int some_number;
std::string some_string;
}
template <typename Archive>
void serialize(Archive& ar, Foo& foo, unsigned int const version)
{
ar & foo.some_number;
ar & foo.some_string;
}
有没有更好的方法向类添加与格式无关的序列化?理想的解决方案应满足以下要求:
- 分散:向类添加序列化时,只应更改包含该类的文件。我不想以giant if else语句的中心文件结束
- 允许嵌套类:如果类
有一个类型为Foo
的成员,并且Bar
是可序列化的,那么我可以在序列化Bar
时重用它,而无需重新实现Foo
的整个序列化Bar
- (可选)相同的读/写方法。Boost序列化通过区分输入和输出存档实现了这一点
- (可选)非侵入式:您可以在不接触类的情况下向类添加序列化
def serialize(archive, value, version):
if isinstance(value, Foo):
serialize_foo(archive, value, version)
elif isinstance(value, Bar):
serialize_bar(archive, value, version)
...