2017-02-03 2 views
0

私はこの出力を対話モードで取得しています。私は(オブジェクトファイルに格納されている)クラスの定義は、データを取得し、それを使用する時にRAMにそこになければならないことを実現した出力から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' 

。しかし、私はクラス定義も格納していないのですが、ファイルにオブジェクトを格納することによって、なぜこれが当てはまるのか理解できません。

+0

テキストのイメージを貼り付けない - テキスト自体を貼り付けます。 –

+0

提案していただきありがとうございます。 –

答えて

1

pickleモジュールは、名前付き参照でクラスを格納します。クラスの名前または場所を変更すると、エラーが発生します。その迅速なイラストがインタラクティブに見ることができます

>>> class test: 
    x = 5 


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

首尾負荷ピクルスを呼び出すには(あなたがアイドル状態で再起動を呼び出したときに破壊された)以前に定義されたクラスを見つけることができなければなりません