datetime objects and __new__()

Peter Otten __peter__ at web.de
Tue Nov 25 09:46:57 EST 2008


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.

Peter



More information about the Python-list mailing list