Why date do not construct from date?

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Tue Jun 2 09:05:08 CEST 2009


En Tue, 02 Jun 2009 03:14:22 -0300, Chris Rebert <clp2 at rebertia.com>  
escribió:

> On Mon, Jun 1, 2009 at 10:25 PM, Alexandr N Zamaraev <tonal at promsoft.ru>  
> wrote:

>>>>> import datetime as dt
>>>>> d = dt.date(2009, 10, 15)
>>>>> dt.date(d)
>> Traceback (most recent call last):
>>  File "<stdin>", line 1, in <module>
>> TypeError: function takes exactly 3 arguments (1 given)

>> Why int form int, str from str, Decumal from Decumal can construct bat  
>> date from date not?
>
> Probably because the function signatures would be so different. str(),
> int(), etc *always* take *exactly one* argument -- the object to
> convert. In contrast, date() takes several integers corresponding to
> the year, month, and day. Adding a second signature to it that took
> exactly one argument (of type `date`) and copied it would be
> significantly different from its other signature; in idiomatic Python,
> one would typically make a separate, new function for this drastically
> different signature.

That doesn't convince me. It's not very consistent along the various  
types: int("3ab0",16) is rather different than int(3.2) but they're the  
same function...

> However, the `date` type is immutable, so there's no reason at all to
> try and copy a new instance from an existing one anyway, thus a
> single-argument copy-constructor is completely unnecessary, hence why
> there isn't one.

Isn't the same for all other examples (int, float, str, Decimal...)?  
They're all immutable types, and some have several and rather different  
constructor signatures:

py> Decimal((0, (1, 5, 0, 0), -3))
Decimal('1.500')
py> Decimal(Decimal('1.500'))
Decimal('1.500')

If one can say float(3.0), str("hello"), etc -- what's so wrong with  
date(another_date)?

-- 
Gabriel Genellina




More information about the Python-list mailing list