Overloading ctor doesn't work?
Paul McGuire
ptmcg at austin.rr._bogus_.com
Thu Jan 20 14:54:50 EST 2005
"Kent Johnson" <kent3737 at yahoo.com> wrote in message
news:41effd30$1_1 at newspeer2.tds.net...
> > 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)
More information about the Python-list
mailing list