Tim Peters wrote:
Yes, and all builtin Python types work that way. For example, int.__add__ or float.__add__ applied to a subclass of int or float will return an int or float; similarly for a subclass of str. This was Guido's decision...
I will not discuss it with him. He is usually right :-s
Generally speaking, no. But I'm sure someone will torture you with a framework that purports to make it easy <wink>.
Apparently not... But here is my solution.
If anybody is interrested. It should also be obvious what I am working on.
Btw. I really love doctests ... Unittests are a nice idea. But doctest is a really practical solution.
###############################
class vDatetime(datetime):
"""
A subclass of datetime, that renders itself in the iCalendar datetime
format. >>> dt = vDatetime(1970, 1,1, 12, 30, 0)
>>> str(dt)
'19700101T123000' >>> dt2 = vDatetime(1970, 1,1, 0, 0, 0)
>>> str(dt - dt2)
'PT12H30M' Adding is not allowed
>>> dt + dt2
Traceback (most recent call last):
...
AttributeError: 'NotImplementedType' object has no attribute 'days'
""" def __init__(self, *args, **kwargs):
datetime.__init__(self, *args, **kwargs)
self.params = Params() def __add__(self, other):
return self._to_vdatetime(datetime.__add__(self, other)) def __sub__(self, other):
return self._to_vdatetime(datetime.__sub__(self, other)) def _to_vdatetime(self, result):
if hasattr(result, 'timetuple'):
return vDatetime(*result.timetuple()[:6])
return vDuration(result.days, result.seconds) def fromstring(st):
"Class method that parses"
try:
timetuple = map(int, ((
st[:4], # year
st[4:6], # month
st[6:8], # day
st[9:11], # hour
st[11:13], # minute
st[13:15], # second
)))
except:
raise ValueError, 'Wrong format'
return vDatetime(*timetuple)
fromstring = staticmethod(fromstring) def __str__(self):
return self.strftime("%Y%m%dT%H%M%S")--
hilsen/regards Max M, Denmark
http://www.mxm.dk/ IT's Mad Science -- http://mail.python.org/mailman/listinfo/python-list
