2017-02-03 4 views
0

대화식 모드에서이 출력을 얻고 있습니다. I는 (객체 파일에 저장된) 클래스의 정의 데이터를 검색하고 그것을 사용시 RAM 거기에 있어야 실현 출력으로부터파이썬 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' 

성공적으로 이전에 정의 된 클래스 (당신이 유휴 상태에서 다시 시작 호출 할 때 어떤이 파괴)

을 찾을 수 있어야 부하 피클를 호출하려면