2017-01-12 58 views
0

我想使用Python的pickle serialiser提供缺省值的默認值。由於這些類很簡單,因此默認值在類的__init__方法中自然存在。我可以從pickle documentation看到有__getnewargs__。但是,這僅適用於__getnewargs__在「酸洗」之前存在的情況。Python Pickle調用構造函數

有什麼辦法可以告訴python pickle總是調用構造函數而不是從未初始化的對象開始?

回答

1

Unpickling將始終創建一個實例,但不會呼叫__init__()。這是設計。在python 2中,有可能覆蓋__getinitargs__()以導致取消打開以用某些參數調用__init__(),但有必要在酸洗時重寫此方法。這在python 3中不再可用。

要達到您想要的效果,僅從self.__setstate__(state)手動撥打self.__init__()是不夠的?您可以提供state中找不到的任何默認參數。