"Kent Johnson" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > > Martin Häcker wrote: > > > >> Hi there, > >> > >> I just tried to run this code and failed miserably - though I dunno > >> why. Could any of you please enlighten me why this doesn't work? > > Here is a simpler test case. I'm mystified too: > > from datetime import datetime > > class time (datetime): > def __init__(self, hours=0, minutes=0, seconds=0, microseconds=0): > datetime.__init__(self, 2001, 10, 31, hours, minutes, seconds, microseconds) > > print time(1,2,3,4) # => 0001-02-03 04:00:00 > print time() # => TypeError: function takes at least 3 arguments (0 given) > > > What happens to the default arguments to time.__init__? What happens to the 2001, 10, 31 arguments > to datetime.__init__? > > I would expect the output to be > 2001-10-31 01:02:03.000004 > 2001-10-31 00:00:00.000000 > > Kent
I can't explain this behavior, but this version does work (uses datetime.combine instead of ctor) -- Paul from datetime import datetime, date as dt_date, time as dt_time class time_d (datetime): def __new__(cls, *args): # default to no microseconds if len(args)==3: args = args + (0,) if len(args)==4: tmpdate = datetime.today() h, mi, s, ms = args return datetime.combine(tmpdate, dt_time(h,mi,s,ms)) elif len(args)==7: y,m,d,h,mi,s,ms = args return datetime.combine(dt_date(y,m,d), dt_time(h,mi,s,ms)) else: raise TypeError, "wrong number of args" print time_d(2001,10,31,1,2,3,4) print time_d(1,2,3,4) print time_d(1,2,3) -- http://mail.python.org/mailman/listinfo/python-list