Python 从json覆盖self
我正在写一个程序,它应该或多或少地连续运行。如果我终止程序,或者它抛出错误,我希望保存所有对象实例。为此,我使用jsonpickle保存所有实例。当程序继续进行时,我想继续我中断的地方。我的想法是这样做:Python 从json覆盖self,python,instance,jsonpickle,Python,Instance,Jsonpickle,我正在写一个程序,它应该或多或少地连续运行。如果我终止程序,或者它抛出错误,我希望保存所有对象实例。为此,我使用jsonpickle保存所有实例。当程序继续进行时,我想继续我中断的地方。我的想法是这样做: class A(object): def __init__(self): try: with open('A.json', 'r') as fp: self = jsonpickle.decode(json.loa
class A(object):
def __init__(self):
try:
with open('A.json', 'r') as fp:
self = jsonpickle.decode(json.load(fp))
except IOError:
self.X = 'defaultvalue'
self.Y = 'defaultvalue'
其中A.json包含以前使用jsonpickle保存的实例(该部分有效)。但是,self不会被我的代码覆盖
我怀疑我必须实现我想在新世界里做的事情。我读了文档,但是我有点迷路了。如果您能就如何以一种好的方式实现我想要的东西提供任何建议,我将不胜感激。我不知道jsonpicle,但有了JSON,您可以这样做:
import json
class ClassA(object):
def __init__(self):
try:
with open('A.json', 'r') as fp:
self.__dict__ = json.loads(fp.read())
except IOError:
self.X = 'defaultvalue'
self.Y = 1
def __del__(self):
with open('A.json', 'wb') as fp:
fp.write( json.dumps( self.__dict__) )
if __name__ == "__main__":
myobj = ClassA()
print "GOT X : " + str(myobj.X)
print "GOT Y : " + str(myobj.Y)
myobj.X += " RUN ME AGAIN "
myobj.Y += 1
myobj = None
请注意,\uu del\uu
是由垃圾收集器调用的;至少对我来说,如果我没有那里的myobj=None
,它完全失败了
不管怎样,如果你只是假设你总是可以在关机时把东西写到磁盘上,那么你最终会遇到麻烦;想想当你拔出电源插头时会发生什么:我建议尽快进行写操作(并调用一些刷新功能以确保修改也写入磁盘)。我真的怀疑它是否能无限运行。所以你只能有一个
类的实例?为什么不在课堂外解缆呢?