A pickle problem!
Paulo da Silva
p_s_d_a_s_i_l_v_a_ns at netcabo.pt
Thu Apr 21 21:52:27 EDT 2016
À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'
>
More information about the Python-list
mailing list