Still the __new__ hell ...

Arnaud Delobelle arnodel at
Sat Mar 17 23:08:03 CET 2007

On Mar 17, 9:31 pm, Paulo da Silva <psdasil... at esotericaX.ptX> wrote:
> Sorry to put here too many questions about __init__ __new__
> stuff but I always found a new problem when using them.
> I have searched for simple __new__ docs on how to do the
> basic things but find none.
> After trying the solutions people gently posted here
> (thanks) I run into new trouble when I go with further
> development.
> Here is the new situation.
> As suggested in a previous post, I used __new__ to
> subclass date class but now cPickle/pickle loads
> does not work.
> from datetime import date
> import cPickle,string
> class MyDate(date):
>         def __new__(cls,year,month=None,day=None):
>                 if type(year) is str:
>                         year,month,day=map(int,string.split(year,'-'))
>                 if year<100:
>                         year+=2000
>                 return date.__new__(cls,year,month,day)
> class C1(object):
>         def __init__(self):
>                 self.x=MyDate("2007-3-15")
>         def f(self):
>                 print self.x
> c1=C1()
> d=cPickle.dumps(c1)
> c2=cPickle.loads(d)
> c2.f()

I haven't tried your code but I think that you may need to define a
__reduce__ method in your MyDate class in order to give a clue to the
python as to how to pickle its instances.  For more details see:

Something like:

class MyDate(date):
    def __reduce__(self):
        return type(self), (self.year, self.month,

might solve your problem.



More information about the Python-list mailing list