请原谅我的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>