从文件初始化类的最pythonic方法?

从文件初始化类的最pythonic方法?,python,pickle,Python,Pickle,请原谅我的PythonNoob ism,但我已经用其他几种语言编写了这个模式,并且找不到一个似乎。。。我想是蟒蛇 我想要一个基类,它要么接受一组默认参数,要么从文件中加载自身。然后它有一个save()方法,将其实例数据保存到给定的命名文件中 关键的是,我希望能够修改从基类继承的类来添加或删除属性,并且仍然能够从旧文件加载旧属性。此代码似乎有效(2.7): 然后,继承类: class BiggerThing(Thing): def __init__(self, filename='', x

请原谅我的PythonNoob ism,但我已经用其他几种语言编写了这个模式,并且找不到一个似乎。。。我想是蟒蛇

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

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

然后,继承类:

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')
同样重要的是,如果我取消对“self.whoops”行的注释并加载旧文件,我仍然可以得到x=1和y=2的对象,然后可以保存()设置为“whoops”的新对象


这似乎是制作可自加载对象的一种常见模式,但我还没有见过这种模式,我想知道这是不是因为它不是很pythonic?

我认为它不是特别不pythonic(或者不是)。对于大型应用程序,我可能希望在另一个对象中使用保存/加载逻辑,否则您的类将承担太多的责任。该对象是否太大(或您允许的内存太小),以至于需要涉及文件系统,或者您是否试图保护父对象数据不受子类的影响?如果你的目标是数据保护,你可以避免我使用的文件系统。你读过了吗?看起来像是你会感兴趣的东西。@snakecharmerb-这是最接近答案或观点的。我试图合理化自加载/保存对象的便利性,我通常(在其他语言中)将其用于通常绑定到同一文件的小型配置类型对象。但你是对的,更复杂的对象可能希望它们的加载/保存不绑定以获得灵活性。@willnx——实际上两者都不是。我只想要一个持久对象,这样当代码再次启动时,对象就可以得到它的最后一个状态。对于大型应用程序,我可能希望在另一个对象中使用保存/加载逻辑,否则您的类将承担太多的责任。该对象是否太大(或您允许的内存太小),以至于需要涉及文件系统,或者您是否试图保护父对象数据不受子类的影响?如果你的目标是数据保护,你可以避免我使用的文件系统。你读过了吗?看起来像是你会感兴趣的东西。@snakecharmerb-这是最接近答案或观点的。我试图合理化自加载/保存对象的便利性,我通常(在其他语言中)将其用于通常绑定到同一文件的小型配置类型对象。但你是对的,更复杂的对象可能希望它们的加载/保存不绑定以获得灵活性。@willnx——实际上两者都不是。我只需要一个持久性对象,这样当代码再次启动时,该对象就可以得到它的最后一个状态。
t2 = BiggerThing('file.pickle')