【问题标题】: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 中找不到的任何默认参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-10
      • 2011-04-16
      • 1970-01-01
      • 2013-04-12
      • 2015-11-30
      • 2017-02-08
      • 2021-11-23
      相关资源
      最近更新 更多