我有一个我在一个文件中创建的类的对象的Python字典。它的格式为{string : object}
,有几个键值对。
我的目标是在单独的文件中的某个方法中执行某些操作,该文件更改字典中某些对象的属性,并将这些更改保存到这些对象中,同时将它们保留在字典中。
我尝试过使用pickle,但它似乎没有保存对字典中对象的更改。
我现在正在做什么的基本想法以及它有什么问题:
文件#1:
class A:
def __init__(self):
self.value = 0
a = A()
dict = {"Test" : a}
pickle.dump(dict, open("save.p", "wb"))
文件#2:
dict = pickle.load(open("save.p", "rb"))
dict["Test"].value += 1
print(dict["Test"].value)
pickle.dump(dict, open("save.p", "wb"))
因此,当我第一次运行文件#2时,它应该打印1
,并且确实如此
但是当我第二次运行文件#2时,我希望它打印2
,但它再次打印1
,因为没有保存对值的更改。
可能是我错误地使用泡菜......
任何帮助将不胜感激!谢谢!
答案 0 :(得分:0)
请注意,没有任何类的代码或数据被腌制
请参阅pickling class instances了解正确的方法。
同样,class A
在unpickling环境中不存在,这不是一件好事,如果我正确阅读文档,则类名会被取消。
BTW我使用json
而不是pickle
,因此您可以在两次运行之间打开文件并自行检查以了解发生的情况。使用json
优于pickle
,以及使用pickle
而不是json
时,有一些优势,这里是comparison between pickle and json。
哦,并且,避免命名变量dict
或任何现有内置函数,它会遮挡它们并导致非常奇怪的行为。