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