2015-04-23 34 views
0

這是最簡單的說明一下,我想用一個例子做一個實例:分配給自己在Python,之後未酸洗同一類

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() 

而且我想這個打印真,但我認爲自己的對象在Python中是不可變的。重構我的代碼會很痛苦,有沒有什麼辦法可以快速實現上述目標?

+1

自我只是據我所知一個普通變量。你已經丟棄了作爲self參數傳入的原始對象,並且在這之後,self指向一個不同的對象,其「someVariable」屬性爲1. – Hammerite

+0

此問題有經典「XY」問題的症狀,您正在問如何做Y(你設計的解決方案)而不是問X(你真正的問題)。你在這裏試圖解決什麼問題? –

+0

以下是Raito回答的問題:) – jimbarrett27

回答

0

您應該泡菜self.__dict__它存儲該類的每個屬性。 而你所要做的就是取消它。 (如你所知,這是一個字典。)

+0

完美,謝謝! – jimbarrett27

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