[Python-ideas] strptime without second argument as an inverse to __str__
Wolfgang Maier
wolfgang.maier at biologie.uni-freiburg.de
Wed Aug 6 18:20:37 CEST 2014
On 06.08.2014 17:42, Alexander Belopolsky wrote:
>
> On Wed, Aug 6, 2014 at 11:19 AM, Wolfgang Maier
> <wolfgang.maier at biologie.uni-freiburg.de
> <mailto:wolfgang.maier at biologie.uni-freiburg.de>>
> wrote:
>
> What are the downsides of:
>
> dt = datetime.datetime.now() # assuming this works ;)
> sdt = str(dt)
> ndt = datetime.datetime(std)
> print(dt == ndt)
> #True
>
>
> I'll refrain from mentioning "explicit is better than implicit" ;)
>
> It's just that it seems to be a design pattern of the datetime class
> to provide alternative constructors as classmethods instead of doing
> magic things in __new__ .
>
>
> I don't think this is a "design pattern". In Python 2, having date(str)
> constructor was blocked by some magic that is there to support unpickling:
>
> >>> from datetime import date
> >>> date('\x07\xd0\x01\x01')
> datetime.date(2000, 1, 1)
>
I see. None of my examples (fromtimestamp, utcfromtimestamp and now)
involves string parsing though.
> This is no longer an issue in Python 3.
>
> Note that if we allow date('2000-01-01'), this may become a more
> readable and efficient alternative to date(2001, 1, 1).
>
One problem with this is the very first concern raised by Steven and
Skip in this thread: choosing a string format that __new__ can deal with
*would* lock you into this format.
If later, for example, full-blown ISO 8601 or even just RFC 3339 parsing
makes it into the module, wouldn't you rather want this to be done by
__new__ when it sees a string ?
Implementing the current proposal as a classmethod with its own name
(once a good one is accepted) is a much more cautious approach.
BTW, Terry's suggestion of datetime.fromstr(s) sounds very reasonable.
More information about the Python-ideas
mailing list