Python Pickle 调用构造函数

c z*_*c z 6 python constructor pickle jsonpickle python-3.x

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

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

有什么方法可以告诉 python pickle 始终调用构造函数而不是从未初始化的对象开始?

jlh*_*jlh 12

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

为了实现您想要的,仅手动调用self.__init__()fromself.__setstate__(state)是否就足够了?您可以提供在state.