Python Pickle调用构造函数

7
我希望使用Python的pickle序列化器为缺失值提供默认值。由于类很简单,因此默认值自然存在于类的__init__方法中。
我可以从pickle documentation中看到有__getnewargs__。但是,这仅适用于在“pickling”之前存在__getnewargs__的情况。
有没有办法告诉Python pickle始终调用构造函数而不是从未初始化的对象开始?
1个回答

13

反序列化(Unpickling)总是在不调用__init__()的情况下创建一个实例。这是设计上的考虑。在Python 2中,可以重写__getinitargs__()以导致反序列化使用一些参数调用__init__(),但必须在序列化时已经重写了此方法。在Python 3中不再支持此功能。

为了实现您想要的,仅手动从self.__setstate__(state)中调用self.__init__()是否就足够了呢?您可以提供任何未在state中找到的默认参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接