pickle을 사용하여 맞춤 클래스를 저장하려고합니다. 아래의 코드와 매우 비슷합니다 (클래스에 정의 된 몇 가지 메소드 및 데이터에 대한 몇 가지 더 많은 dicts 등). 그러나 종종이 작업을 실행하고 pickle을 누른 다음 unpickle을 수행하면 클래스에있는 데이터가 모두 손실되고 새로운 빈 인스턴스가 만들어진 것처럼 처리됩니다.가끔씩 비어있는 객체를 만듭니다.
import pickle
class MyClass:
VERSION = 1
some_data = {}
more_data = set()
def save(self,filename):
with open(filename, 'wb') as f:
p = pickle.Pickler(f)
p.dump(self)
def load(filename):
with open(filename,'rb') as ifile:
u = pickle.Unpickler(ifile)
obj = u.load()
return obj
이것이 피클 클래스의 메모와 관련이 있는지 궁금해했지만 필자는 그렇게 느끼지 않았습니다. 난이 충분히 희망, (분명히 읽을 수있는 것을 의미하지,하지만 분명히 어떤 데이터도 포함하지 않는다) 어쨌든
€c__main__ MyClass q
을 : 작동하지 않을 때, 내 생성 된 파일을보고는 다음과 같이 보입니다 누군가 여기서 일어날 일이 무엇인지, 무엇을보아야하는지 이해해야합니다.
코드를'pickle.dumps'와'pickle.loads' 사이에서 바꿀 수 있습니까? 왜냐하면 pickle 프로토콜은 코드 변경에 탄력적이라고 생각하지 않기 때문입니다. –
클래스에서 [pickle 프로토콜] (http://docs.python.org/2/library/pickle.html#pickle-protocol)을 구현하여 제대로 작동하는지 확인해야합니다. – Wessie
인스턴스 데이터를'some_data' 및'more_data' 클래스 변수에 저장하고 있습니까? 그것들은 인스턴스 자체의 일부가 아니기 때문에'pickle '에 의해 저장되지 않습니다. 클래스에 저장하는 것이 아니라'__init__' 메쏘드로 만들어야합니다. – Blckknght