Chinaunix

标题: 自定义类的序列化(pickle)问题? [打印本页]

作者: micrchaoo    时间: 2015-11-11 18:19
标题: 自定义类的序列化(pickle)问题?
本帖最后由 micrchaoo 于 2015-11-11 18:20 编辑

一本书上说,若自定义类中没有定义__getstate__()和__setstate__()方法,则默认序列化实例的基础是__dict__<br>下图中Test类定义了__slots__,抑制了__dict__的生成,所以print(a.__dict__)会出错<br>没有特别定义以上两个方法的Test类,不仅成功序列了,而且反序列化成功,这是为什么,是如何做到的?

作者: icymirror    时间: 2015-11-12 08:37
是可以被Pickle的,是你的代码的参数有问题--假定你使用的是Python 2.7系列。
pickle.dump中的protocol的取值可以是:0, -1, 1, 2
其中,0是默认,这个可以使用之前的ASCII mode
-1是自动选择最高可以使用的protocol
1是会因为有slot出现问题的版本,你可以看下出问题的库:copy_reg.py
2是不再依赖slot的版本,这个可以通过
而你的代码中使用的是3,而2.7自带的pickle最高只支持到2




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2