Path: csiph.com!aioe.org!.POSTED!not-for-mail From: Paulo da Silva Newsgroups: comp.lang.python Subject: Re: A pickle problem! Date: Fri, 22 Apr 2016 02:52:27 +0100 Organization: Aioe.org NNTP Server Lines: 44 Message-ID: References: NNTP-Posting-Host: rpgRlhg9tMo1Vs7b/IQ9OA.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 X-Notice: Filtered by postfilter v. 0.8.2 Xref: csiph.com comp.lang.python:107470 Às 22:43 de 21-04-2016, Paulo da Silva escreveu: > Hi. > > Why in this code fragment self.__name is not kept between pickle > dumps/loads? How to fix it? > > Thanks. > > import pickle > import pandas as pd > import numpy as np > > class C(pd.DataFrame): > def __init__(self,name,*a,**b): > super(C,self).__init__(*a,**b) > self.__name=name > > def GetName(self): > return self.__name > # Adding this works but looks tricky! def __getstate__(self): dfstate=super(C,self).__getstate__() cstate=(dfstate,self.__name) return cstate def __setstate__(self,cstate): super(C,self).__setstate__(cstate[0]) self.__name=cstate[1] > > dates = pd.date_range('20130101', periods=6) > c = C("FOO",np.random.randn(6,4), index=dates, columns=list('ABCD')) > > cd=pickle.dumps(c,pickle.HIGHEST_PROTOCOL) > > d=pickle.loads(cd) > > d.GetName() > > # AttributeError: 'C' object has no attribute '_C__name' >