在取消相同类的实例之后,在Python中分配给self

时间:2015-04-23 12:45:12

标签: python pickle self

最容易用一个例子来说明我想要做的事情:

Class A(object):

    someVariable = 0

    def __init__(self):

        self.someVariable = 1

        with open('file.pkl','wb') as pfile:
            pickle.dump(self,pfile)

        self.someVariable = 2

        self = pickle.load('file.pkl')

        print self.someVariable == 1

blah = A()

我希望打印True,但我认为self对象在Python中是不可变的。重构我的代码会很痛苦,有没有办法快速实现上述目标?

2 个答案:

答案 0 :(得分:0)

你应该挑选存储该类的每个属性的self.__dict__。 而你所要做的就是去除它。 (正如你所想,它是一个字典。)

答案 1 :(得分:0)

我不确定我是否理解你真正想要的东西,但我猜你试图将一个实例持久化到磁盘上。我的看法是这样的:

class A(object):
    some_variable = 0

    def __init__(self, value=1):
        self.some_variable = value

    def save(self, name='file.pkl'):
        with open(name,'wb') as pfile:
            pickle.dump(self, pfile)

    @staticmethod
    def load(name='file.pkl'):
        return pickle.load(open(name, 'rb'))

然后你可以这样做:

>>> a = A(2)
>>> a.some_variable
2

>>> a.save('foo.pkl')
>>> a = A()
>>> a.some_variable
1

>>> a = A.load('foo.pkl')
>>> a.some_variable
2