Python Pickle 调用构造函数

Python Pickle call constructor

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

pickle documentation可以看出有__getnewargs__。但是,这仅适用于 __getnewargs__ 在 "pickling".

之前存在的情况

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

Unpickling 总是会在不调用 __init__() 的情况下创建一个实例。这是设计使然。在 python 2 中,可以覆盖 __getinitargs__() 以导致 unpickling 调用带有一些参数的 __init__(),但是有必要在 pickling 时覆盖此方法。这在 python 3 中不再可用。

要实现你想要的,从self.__setstate__(state)手动调用self.__init__()不就可以了吗?您可以提供 state.

中没有的任何默认参数