7

我想使用 Python 的 pickle 序列化程序为缺失值提供默认值。由于类很简单,默认值自然存在于类的__init__方法中。

我可以从pickle 文档中看到有__getnewargs__. 但是,这仅适用于__getnewargs__“酸洗”之前存在的情况。

有没有办法告诉 python pickle 总是调用构造函数而不是从未初始化的对象开始?

4

1 回答 1

13

Unpickling 将始终创建一个实例而不调用__init__(). 这是设计使然。在 python 2 中,可以重写__getinitargs__()以使用一些参数调用 unpickling __init__(),但必须在酸洗时重写此方法。这在 python 3 中不再可用。

self.__init__()为了实现您想要的,仅手动调用from还不够self.__setstate__(state)吗?您可以提供任何未在state.

于 2017-04-18T13:06:04.473 回答