On Nov 25, 4:39 pm, Peter Otten <[EMAIL PROTECTED]> wrote: > peter wrote: > > On Nov 25, 3:46 pm, Peter Otten <[EMAIL PROTECTED]> wrote: > >> peter wrote: > >> >>>> import datetime > >> >>>> class ts(datetime.datetime): > >> > ... foo = 'bar' > >> > ... def __new__(cls, s): > >> > ... c = super(ts, cls) > >> > ... return c.fromtimestamp(s) > >> > ... > >> >>>> t = ts(0) > >> > Traceback (most recent call last): > >> > File "<stdin>", line 1, in <module> > >> > File "<stdin>", line 5, in __new__ > >> > TypeError: __new__() takes exactly 2 arguments (9 given) > > >> > I don't understand why that happens -- am I correct in assuming that > >> > the call to .fromtimestamp() is picking up on the ts class? Shouldn't > >> > it get the datetime class instead? > > >> > (Yes, I am aware of the problems of using datetime and timestamps) > > >> > Could some kind soul please enlighten me? > > >> If the datetime class were implemented in Python the fromtimestamp() > >> method could look like: > > >> @classmethod > >> def fromtimestamp(cls, s): > >> year, month, day,... = ... > >> return cls(year, month, day,...) > > >> This will fail since you modified the constructor to accept only a single > >> argument. > > > Hm, I had hoped that using super() would result in calling the > > constructor of the superclass, ie. datetime. Did I use super() wrong? > > > Thanks, > > peter. > > Sorry, I didn't pay the necessary attention. > > I've only used super() with "normal" methods, but as > > >>> from datetime import * > >>> class TS(datetime): > > ... def __new__(cls, ts): > ... return datetime.fromtimestamp(ts) > ...>>> TS(0) > > datetime.datetime(1970, 1, 1, 1, 0) > > works super() would be the most likely culprit.
Yes, that works, except the returned object is (unsurprisingly) a pure datetime instance, which means I cannot access any other attributes I defined on my class. The docs on super() ( http://docs.python.org/library/functions.html#super ) are a little murky unfortunately. Cheers, peter. > Peter -- http://mail.python.org/mailman/listinfo/python-list