在 Python 中分配给 self,在取消 pickling 相同 class 的一个实例之后

Assigning to self in Python, after un-pickling an instance of the same class

用一个例子来说明我想做什么是最简单的:

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 中是不可变的。重组我的代码会很痛苦,有什么方法可以快速实现上述目标吗?

您应该 pickle self.__dict__,它存储 class 的每个属性。 你所要做的就是将它解开。 (如您所想,这是一条命令。)

我不确定我是否理解您真正想要的是什么,但我猜您正试图将一个实例保存到磁盘。我的看法是这样的:

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