Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中与格式无关的序列化_Python_Serialization - Fatal编程技术网

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

我最近在寻找序列化python类的方法,只找到了一些涉及特定格式库的主题,如
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序列化通过区分输入和输出存档实现了这一点
  • (可选)非侵入式:您可以在不接触类的情况下向类添加序列化

不确定是否可以使用第三方软件包,但请查看。你也可以深入研究它的源代码来获得一些想法。第三方库是可以的。棉花糖库看起来很有前途,我会去看看:)我在棉花糖中唯一缺少的是文件中的版本号。你知道类似的库可以选择将一个版本传递给序列化程序吗?我确认我以前也使用过marshmallow,尽管几个月前我遇到了加载和转储之间语义不同的问题,但看起来他们已经解决了。
def serialize(archive, value, version):
    if isinstance(value, Foo):
        serialize_foo(archive, value, version)
    elif isinstance(value, Bar):
        serialize_bar(archive, value, version)
    ...