【问题标题】:Python Pickle call constructorPython Pickle 调用构造函数
【发布时间】:2017-01-12 15:05:53
【问题描述】:
我想使用 Python 的 pickle 序列化程序为缺失值提供默认值。由于类很简单,默认值自然存在于类的__init__ 方法中。
我可以从pickle documentation 看到有__getnewargs__。但是,这只适用于__getnewargs__ 在“酸洗”之前存在的情况。
有没有办法告诉 python pickle 总是调用构造函数而不是从未初始化的对象开始?
【问题讨论】:
标签:
python
python-3.x
constructor
pickle
jsonpickle
【解决方案1】:
Unpickling 将始终创建一个实例而不调用 __init__()。这是设计使然。在 python 2 中,可以覆盖 __getinitargs__() 以导致 unpickling 使用一些参数调用 __init__(),但必须在酸洗时覆盖此方法。这在 python 3 中不再可用。
要实现你想要的,仅仅从self.__setstate__(state) 手动调用self.__init__() 还不够吗?您可以提供在state 中找不到的任何默认参数。