À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' > -- https://mail.python.org/mailman/listinfo/python-list