在 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
用一个例子来说明我想做什么是最简单的:
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