如何使用dill将所有类变量写入磁盘?

时间:2017-03-12 20:29:54

标签: python pickle dill

我正在尝试在我正在编写的代码中存储一些对象以便重新启动。它们相当复杂,包含几层类,包括使用类变量的类。我需要这一切才能恢复,当我dill.load()它恢复。

不幸的是,我正在做的一件非常具体的事情似乎与莳萝无关。

我创建了一个展示问题的测试用例:

basic.py:

class Basic(object):
    x = 10
    def __init__(self, initial=False):
        super(Basic, self).__init__()
        self.y = 4
        Basic.z = 5

make_dill.py:

import dill
from basic import Basic
b = Basic()
with open('basic', 'wb') as f:
    dill.dump(b, f)
with open('basic', 'rb') as f:
    b = dill.load(f)
print('basic', b.x, b.y, b.z)

un_dill.py:

import dill
with open('basic', 'rb') as f:
    b = dill.load(f)
print('basic', b.x, b.y, b.z)

当它从同一个文件(make_dill.py)运行时它工作正常,但当我尝试在un_dill.py中读取基本文件时:

AttributeError: 'Basic' object has no attribute 'z'

因此,由于某种原因,它不捕获在实例初始化期间分配的类变量z。但它确实捕获了在类定义中分配的类变量x。

我在这里缺少什么?我需要保存这些对象的完整状态。

在稀疏的莳萝文档中,它说

  

除了pickling python对象之外,dill还提供了在单个命令中保存解释器会话状态的功能。

但我无法弄清楚如何做到这一点。

0 个答案:

没有答案