从文件初始化类的大多数pythonic方法?

时间:2016-04-02 06:57:43

标签: python pickle

请原谅我的Python noob-ism,但是我已经用其他几种语言编写了这个模式,并且找不到Python的样板文件,我认为它似乎是...... pythonic。

我想要一个基类,它可以获取一组默认参数,也可以从文件加载自身。然后它有一个save()方法,将其实例数据保存到给定的命名文件。

重要的是,我希望能够修改从基类继承的类以添加或删除属性,并且仍然可以从旧文件加载旧属性。此代码似乎有效(2.7):

import pickle
class Thing(object):
    def __init__(self, filename=''):
        self.filename = filename
        if self.filename:
            self._load()
    def save(self):
        with open(self.filename, 'wb') as f:
            pickle.dump(self,f)
    def _load(self):
        try:
            with open(self.filename, 'rb') as f:
                self.__dict__.update(pickle.load(f).__dict__)
            return True
        except:
            return False

然后是继承类:

class BiggerThing(Thing):
    def __init__(self, filename='', x=0, y=0):
        self.x = x
        self.y = y
        #self.whoops = 'swell'
        super(BiggerThing, self).__init__(filename)

这似乎有效:我可以做到:

t = BiggerThing('file.pickle', x=1, y=2)
t.save()

当我这样做时,我会得到正确的对象:

t2 = BiggerThing('file.pickle')

同样重要的是,如果我取消对“自我”的评论。排队并加载旧文件,我仍然使用x = 1和y = 2返回对象,然后可以使用' whoops'来保存()新对象。集。

这似乎是制作自装物品的常见模式,但我还没有看到它这样,并想知道它是不是因为它不是非常pythonic?< / p>

0 个答案:

没有答案