从json覆盖self

2024-05-29 04:19:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个程序,应该或多或少地连续运行。如果我终止程序,或者它抛出错误,我希望保存所有对象实例。为此,我使用jsonpickle保存所有实例。当程序继续时,我想继续我刚才停下来的地方。我的想法是这样做:

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不会被我的代码覆盖。你知道吗

我怀疑我必须实现我想在新世界里做的事情。我读了文件,但是我有点迷路了。如果您能给我一些建议,告诉我如何以一种好的方式实现我的愿望,我将不胜感激。你知道吗


Tags: 对象实例self程序jsonobjectinitdef
1条回答
网友
1楼 · 发布于 2024-05-29 04:19:05

我不知道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

请注意,__del__是由垃圾收集器调用的;至少对我来说,如果我没有myobj = None,它完全失败了。你知道吗

不管怎样,如果你只是假设你总是可以在关机时把东西写到磁盘上,那么你最终会遇到麻烦;想想当你拔出电源插头时会发生什么:我建议尽快写(并调用一些刷新功能,确保修改也能写到磁盘上)。你知道吗

相关问题 更多 >

    热门问题