我正在尝试在我正在编写的代码中存储几个用于重启目的的对象。它们相当复杂,其中包含几层类,包括使用类变量的类。当我 dill.load() 备份它时,我需要恢复这一切。
不幸的是,我正在做的一件非常具体的事情似乎不适用于莳萝。
我创建了一个显示问题的测试用例:
基本的.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。
我在这里想念什么?我需要保存这些对象的完整状态。
在稀疏的莳萝文档中,它说
除了酸洗 python 对象之外,dill 还提供了在单个命令中保存解释器会话状态的能力。
但我不知道该怎么做。