2017-02-03 14 views
0

我在交互模式下獲取此輸出。Python 2.7中的文件處理中的類

class test: 
     def p(self): 
      print 'PP' 

>>> f=open('E:\Python\Roy Progs\Test','w') 
>>> t=test() 
>>> import pickle 
>>> pickle.dump(t,f) 
>>> f.close() 
>>> f=open('E:\Python\Roy Progs\Test','r') 
>>> pickle.load(f).p() 
PP 
>>> f.close() 
>>> 
=============================== RESTART: Shell =============================== 
>>> f=open('E:\Python\Roy Progs\Test','r') 
>>> import pickle 
>>> pickle.load(f).p() 

Traceback (most recent call last): 
    File "<pyshell#14>", line 1, in <module> 
    pickle.load(f).p() 
    File "E:\Python\lib\pickle.py", line 1384, in load 
    return Unpickler(file).load() 
    File "E:\Python\lib\pickle.py", line 864, in load 
    dispatch[key](self) 
    File "E:\Python\lib\pickle.py", line 1075, in load_inst 
    klass = self.find_class(module, name) 
    File "E:\Python\lib\pickle.py", line 1132, in find_class 
    klass = getattr(mod, name) 
AttributeError: 'module' object has no attribute 'test' 

從我意識到類(其對象被存儲在文件中)的定義必須在那裏在RAM在檢索數據,並使用它的時候輸出。然而,我不明白爲什麼這一定是這種情況,通過將對象存儲在文件中,我不存儲類定義嗎?

+0

請勿粘貼文字圖像 - 粘貼文字本身。 –

+0

謝謝你的建議,我希望現在可以。 –

回答

1

醬菜模塊通過命名參考存儲類。如果您更改班級的名稱或位置,則會引發錯誤。

的是一個快速的說明可以看出,在互動:

>>> class test: 
    x = 5 


>>> from pickle import dumps 
>>> dumps(test) 
'c__main__\ntest\np0\n.' # pickle is storing a reference to 'test' 

成功調用負載泡菜必須能夠找到以前定義的類(當你在空閒呼叫重啓該被銷燬)