Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #18974 > unrolled thread

PyWarts: time, datetime, and calendar modules

Started byRick Johnson <rantingrickjohnson@gmail.com>
First post2012-01-14 10:54 -0800
Last post2012-01-15 03:53 +0000
Articles 16 — 7 participants

Back to article view | Back to comp.lang.python


Contents

  PyWarts: time, datetime, and calendar modules Rick Johnson <rantingrickjohnson@gmail.com> - 2012-01-14 10:54 -0800
    Re: PyWarts: time, datetime, and calendar modules Devin Jeanpierre <jeanpierreda@gmail.com> - 2012-01-14 14:01 -0500
      Re: PyWarts: time, datetime, and calendar modules Rick Johnson <rantingrickjohnson@gmail.com> - 2012-01-14 11:23 -0800
        Re: PyWarts: time, datetime, and calendar modules Devin Jeanpierre <jeanpierreda@gmail.com> - 2012-01-14 15:11 -0500
        Re: PyWarts: time, datetime, and calendar modules Rick Johnson <rantingrickjohnson@gmail.com> - 2012-01-14 13:31 -0800
        Re: PyWarts: time, datetime, and calendar modules Chris Angelico <rosuav@gmail.com> - 2012-01-15 08:56 +1100
        Re: PyWarts: time, datetime, and calendar modules Evan Driscoll <edriscoll@wisc.edu> - 2012-01-14 14:58 -0600
          Re: PyWarts: time, datetime, and calendar modules Rick Johnson <rantingrickjohnson@gmail.com> - 2012-01-14 15:19 -0800
            Re: PyWarts: time, datetime, and calendar modules Chris Angelico <rosuav@gmail.com> - 2012-01-15 11:42 +1100
          Re: PyWarts: time, datetime, and calendar modules Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2012-01-15 04:26 +0000
        Re: PyWarts: time, datetime, and calendar modules Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2012-01-15 04:23 +0000
          Re: PyWarts: time, datetime, and calendar modules Rick Johnson <rantingrickjohnson@gmail.com> - 2012-01-14 21:27 -0800
            Re: PyWarts: time, datetime, and calendar modules Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2012-01-15 07:00 +0000
            Re: PyWarts: time, datetime, and calendar modules Michael Torrie <torriem@gmail.com> - 2012-01-15 19:50 -0700
        Re: PyWarts: time, datetime, and calendar modules Lie Ryan <lie.1296@gmail.com> - 2012-01-16 02:13 +1100
    Re: PyWarts: time, datetime, and calendar modules Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2012-01-15 03:53 +0000

#18974 — PyWarts: time, datetime, and calendar modules

FromRick Johnson <rantingrickjohnson@gmail.com>
Date2012-01-14 10:54 -0800
SubjectPyWarts: time, datetime, and calendar modules
Message-ID<a0ba2204-9d09-46ba-a7e5-0c750b2cbddf@f11g2000yql.googlegroups.com>
The interface for these modules is not intuitive. Instead of creating
true OOP objects we have lists and strings. Any calendar object should
expose string names of both: days of the week and months of the year.
It seems one (or possibly more) of the three expose this important
info however i cannot find it *easily* enough.

It seems we need to combine the three in some shape or form. time and
datetime would no doubt be great bedfellows. Or maybe datetime should
be attached to time, like os.path. In any event the interfaces are
horrendous.

[toc] | [next] | [standalone]


#18975

FromDevin Jeanpierre <jeanpierreda@gmail.com>
Date2012-01-14 14:01 -0500
Message-ID<mailman.4748.1326567721.27778.python-list@python.org>
In reply to#18974
On Sat, Jan 14, 2012 at 1:54 PM, Rick Johnson
<rantingrickjohnson@gmail.com> wrote:
> The interface for these modules is not intuitive. Instead of creating
> true OOP objects we have lists and strings. Any calendar object should
> expose string names of both: days of the week and months of the year.
> It seems one (or possibly more) of the three expose this important
> info however i cannot find it *easily* enough.
>
> It seems we need to combine the three in some shape or form. time and
> datetime would no doubt be great bedfellows. Or maybe datetime should
> be attached to time, like os.path. In any event the interfaces are
> horrendous.


What's "horrendous" about the datetime module interface? Your listed
complaints (OOP etc.) don't seem to have anything to do with it.

-- Devin

[toc] | [prev] | [next] | [standalone]


#18977

FromRick Johnson <rantingrickjohnson@gmail.com>
Date2012-01-14 11:23 -0800
Message-ID<15cdd8f1-35ef-43ea-a1c9-db90bc16f4ad@r16g2000yqi.googlegroups.com>
In reply to#18975
On Jan 14, 1:01 pm, Devin Jeanpierre <jeanpierr...@gmail.com> wrote:

> What's "horrendous" about the datetime module interface? Your listed
> complaints (OOP etc.) don't seem to have anything to do with it.

Well my immediate complaint about date-time is actually a problem with
the syntactic quandaries of the Python language itself.

I find myself navigating an objects API using the dir function or the
autocomplete function of my IDE. Now. One the continuing issues of the
Python's syntax (and the syntax of many other languages) is the fact
that a reader has no idea which names belonging to an object are
methods and which names are instance/class variables. The status quo
has been to use verbs for methods but you cannot always find the
perfect verb, or even sometimes, anyverb! Consider this:

>>> import datetime, time, calendar
>>> d = datetime.date.today()
>>> d.day
14
>>> d.month
1
>>> d.year
2012
>>> d.weekday
<built-in method weekday of datetime.date object at 0x026A5A58>

THAT PISSES ME OFF!!! >:( We should never be forced to guess if a name
is a callable or a variable!

So how do we solve this dilemma you ask??? Well, we need to "mark"
method OR variable names (OR both!) with syntactic markers so there
will be NO confusion.

Observe:
  def $method(self):pass
  self.@instanceveriable
  self.@@classvariable

I dunno if these are the best markers but the "marker" must be
succinct! Of course if we choose to use the "@" and "@@" then we might
as well drop the redundant "self" and allow the compiler to parse out
the difference.

[toc] | [prev] | [next] | [standalone]


#18978

FromDevin Jeanpierre <jeanpierreda@gmail.com>
Date2012-01-14 15:11 -0500
Message-ID<mailman.4750.1326571941.27778.python-list@python.org>
In reply to#18977
On Sat, Jan 14, 2012 at 2:23 PM, Rick Johnson
<rantingrickjohnson@gmail.com> wrote:
> THAT PISSES ME OFF!!! >:( We should never be forced to guess if a name
> is a callable or a variable!
>
> So how do we solve this dilemma you ask??? Well, we need to "mark"
> method OR variable names (OR both!) with syntactic markers so there
> will be NO confusion.

I might be being bit OT, but, you should give Common Lisp a try. It
does something similar for functions versus variables.

As for the issue, I suppose I can see how this would be confusing. I
don't agree with your solution, though. I happen to like the
interchangeability of the different sorts of attributes, so that
x.foo() can be a method call, a classmethod call, or a call on a
function that is an attribute.

-- Devin

[toc] | [prev] | [next] | [standalone]


#18980

FromRick Johnson <rantingrickjohnson@gmail.com>
Date2012-01-14 13:31 -0800
Message-ID<f76ab46c-3272-41fa-9c86-c7e32e4824e8@k28g2000yqn.googlegroups.com>
In reply to#18977
On Jan 14, 1:23 pm, Rick Johnson <rantingrickjohn...@gmail.com> wrote:
>   def $method(self):pass
>   self.@instanceveriable
>   self.@@classvariable

Actually, class level methods can be accessed through
ClassIdentifier.method, and instance methods through
instanceidentifier.instancemethod. So decorating methods becomes
moot.

[toc] | [prev] | [next] | [standalone]


#18981

FromChris Angelico <rosuav@gmail.com>
Date2012-01-15 08:56 +1100
Message-ID<mailman.4752.1326578166.27778.python-list@python.org>
In reply to#18977
On Sun, Jan 15, 2012 at 6:23 AM, Rick Johnson
<rantingrickjohnson@gmail.com> wrote:
> Observe:
>  def $method(self):pass
>  self.@instanceveriable
>  self.@@classvariable

Are you deliberately inverting what PHP does, with $variablename?
(Incidentally, that's one of the things that irks me about PHP -
adorned variable names.)

In any case: Python does not distinguish between functions and other
sorts of objects. It makes no sense to adorn things in this way.

ChrisA

[toc] | [prev] | [next] | [standalone]


#18982

FromEvan Driscoll <edriscoll@wisc.edu>
Date2012-01-14 14:58 -0600
Message-ID<mailman.4753.1326578318.27778.python-list@python.org>
In reply to#18977
On 01/14/2012 02:11 PM, Devin Jeanpierre wrote:
> On Sat, Jan 14, 2012 at 2:23 PM, Rick Johnson
> <rantingrickjohnson@gmail.com>  wrote:
>> THAT PISSES ME OFF!!!>:( We should never be forced to guess if a name
>> is a callable or a variable!
>>
>> So how do we solve this dilemma you ask??? Well, we need to "mark"
>> method OR variable names (OR both!) with syntactic markers so there
>> will be NO confusion.
>
> I might be being bit OT, but, you should give Common Lisp a try. It
> does something similar for functions versus variables.
>
> As for the issue, I suppose I can see how this would be confusing. I
> don't agree with your solution, though.

It also has some problems. For instance, if an object has a member which 
is a type that implements __call__ but is also useful to access "on its 
own", is that a field or a function?

Personally, I'd suggest the thing to "fix" to solve your confusion would 
be how things like your code completion and dir() display the results, 
not anything fundamental about the language. (And also the datetime 
API.) PyDev, for instance, tries to show you what "kind" of thing each 
entry in its completion menu are.

Evan

[toc] | [prev] | [next] | [standalone]


#18984

FromRick Johnson <rantingrickjohnson@gmail.com>
Date2012-01-14 15:19 -0800
Message-ID<5f7637ca-40a2-4d77-bb47-598bc272b739@g27g2000yqa.googlegroups.com>
In reply to#18982
On Jan 14, 2:58 pm, Evan Driscoll <edrisc...@wisc.edu> wrote:
> On 01/14/2012 02:11 PM, Devin Jeanpierre wrote:

> It also has some problems. For instance, if an object has a member which
> is a type that implements __call__ but is also useful to access "on its
> own", is that a field or a function?

Can you site a real world example that would prove your point?

> Personally, I'd suggest the thing to "fix" to solve your confusion would
> be how things like your code completion and dir() display the results,

I must admit this would be the low cost solution, although, i have
always been irked by the obfuscation of programming language syntax. I
don't need the manual anymore. I just need some introspection tools.
HOWEVER, even the best introspection tools in the world cannot make up
for obfuscation.

Consider the case of the obfuscation of sex by certain "gender
neutral" names. males and females frequent usenet and forums around
the net, and in most cases we know that a "Tom", "Dick", and "Harry"
are going be males, and that "June", "April", and "May" are going to
be females. But what about "August", "Jamie", "Payton", or
"Parker"? ...and don't forget about that boy named Sue!

In face to face communication we will know (most times) who is male,
who is female, and who is other. But when all we have to go by is a
simple name, well, that name MUST be descriptive. It must carry some
hint as to sex. "Hello Mr, urrr Mrs., urrr Payton" EGG ON FACE!

Same in programming. We need syntactical clues. When we are removed
from the visual, and have no proper syntactic clues, we are then
forced to guess! -- and nobody wants to be accused of being the
opposite sex!

[toc] | [prev] | [next] | [standalone]


#18987

FromChris Angelico <rosuav@gmail.com>
Date2012-01-15 11:42 +1100
Message-ID<mailman.4757.1326588152.27778.python-list@python.org>
In reply to#18984
On Sun, Jan 15, 2012 at 10:19 AM, Rick Johnson
<rantingrickjohnson@gmail.com> wrote:
> On Jan 14, 2:58 pm, Evan Driscoll <edrisc...@wisc.edu> wrote:
>> On 01/14/2012 02:11 PM, Devin Jeanpierre wrote:
>
>> It also has some problems. For instance, if an object has a member which
>> is a type that implements __call__ but is also useful to access "on its
>> own", is that a field or a function?
>
> Can you site a real world example that would prove your point?

Not without breaking a non-disclosure agreement and copyright.

ChrisA

[toc] | [prev] | [next] | [standalone]


#18995

FromSteven D'Aprano <steve+comp.lang.python@pearwood.info>
Date2012-01-15 04:26 +0000
Message-ID<4f125564$0$29987$c3e8da3$5496439d@news.astraweb.com>
In reply to#18982
On Sat, 14 Jan 2012 14:58:26 -0600, Evan Driscoll wrote:

> On 01/14/2012 02:11 PM, Devin Jeanpierre wrote:
>> On Sat, Jan 14, 2012 at 2:23 PM, Rick Johnson
>> <rantingrickjohnson@gmail.com>  wrote:
>>> THAT PISSES ME OFF!!!>:( We should never be forced to guess if a name
>>> is a callable or a variable!
>>>
>>> So how do we solve this dilemma you ask??? Well, we need to "mark"
>>> method OR variable names (OR both!) with syntactic markers so there
>>> will be NO confusion.
>>
>> I might be being bit OT, but, you should give Common Lisp a try. It
>> does something similar for functions versus variables.
>>
>> As for the issue, I suppose I can see how this would be confusing. I
>> don't agree with your solution, though.
> 
> It also has some problems. For instance, if an object has a member which
> is a type that implements __call__ but is also useful to access "on its
> own", is that a field or a function?

This is the problem with Ruby's syntax for calling functions with no 
argument with brackets. Since f on its own is interpreted as "call f with 
no arguments", there is no easy way to get a reference to the object f. 
This makes functions second-class objects in Ruby, since you can't refer 
to them easily by name like you can other objects.


-- 
Steven

[toc] | [prev] | [next] | [standalone]


#18994

FromSteven D'Aprano <steve+comp.lang.python@pearwood.info>
Date2012-01-15 04:23 +0000
Message-ID<4f1254cb$0$29987$c3e8da3$5496439d@news.astraweb.com>
In reply to#18977
On Sat, 14 Jan 2012 11:23:29 -0800, Rick Johnson wrote:

> On Jan 14, 1:01 pm, Devin Jeanpierre <jeanpierr...@gmail.com> wrote:
> 
>> What's "horrendous" about the datetime module interface? Your listed
>> complaints (OOP etc.) don't seem to have anything to do with it.
> 
> Well my immediate complaint about date-time is actually a problem with
> the syntactic quandaries of the Python language itself.
> 
> I find myself navigating an objects API using the dir function or the
> autocomplete function of my IDE. Now. One the continuing issues of the
> Python's syntax (and the syntax of many other languages) is the fact
> that a reader has no idea which names belonging to an object are methods
> and which names are instance/class variables. 

This is not Java, and we prefer Python terminology.

A variable holding an int is an int variable.
A variable holding a string is a string variable.
A variable holding a list is a list variable.
A variable holding an instance is an instance variable.
A variable holding a class is a class variable.

Clarity of language is your friend. Perhaps you mean instance and class 
ATTRIBUTES, since dotted names are attributes, not variables.

x # x is a variable
x.y  # y is an attribute of x

Methods ARE attributes. You are asking for a distinction which does not 
exist. This is Python, not Java, and methods are attributes which happen 
to be callable. (Actually, to be technical they are attributes which use 
the descriptor protocol to return a callable.) In some other languages, 
methods (and functions and classes) are second-class entities created at 
compile time. In Python, they are first-class objects created at runtime 
like all other objects. Distinguishing methods from other attributes by 
syntax alone is ugly and artificial.


> The status quo has been to
> use verbs for methods but you cannot always find the perfect verb, or
> even sometimes, anyverb! Consider this:
> 
>>>> import datetime, time, calendar
>>>> d = datetime.date.today()
>>>> d.day
> 14
>>>> d.month
> 1
>>>> d.year
> 2012
>>>> d.weekday
> <built-in method weekday of datetime.date object at 0x026A5A58>
> 
> THAT PISSES ME OFF!!! >:( We should never be forced to guess if a name
> is a callable or a variable!

Guessing is for fourth-class programmers who don't know their language 
and are too lazy to RTFM.

py> import datetime
py> d = datetime.date.today()
py> hasattr(d.weekday, '__call__')
True

help(d) is also your friend.


> So how do we solve this dilemma you ask??? Well, we need to "mark"
> method OR variable names (OR both!) with syntactic markers so there will
> be NO confusion.

No we don't. There is no dilemma.

At worst, we might agree that the datetime API is old and tired, and that 
if descriptors existed back in Python 1.x then datetime.weekday could 
have been a computed property instead of a method, but alas we've lost 
the opportunity for this. Any changes to datetime need to be backward 
compatible.

If you want to actually do something useful, instead of just big-noting 
yourself and trolling about how bad Python is because it doesn't work 
like the language you have in your head, I suggest you write a datetime 
wrapper class and offer it to the community via PyPI. If it is good, and 
becomes popular, then in Python 3.4 or 3.5 it may become part of the 
standard library.


-- 
Steven

[toc] | [prev] | [next] | [standalone]


#18997

FromRick Johnson <rantingrickjohnson@gmail.com>
Date2012-01-14 21:27 -0800
Message-ID<09e6c247-f3b1-47f2-9b8a-b6de67dc7111@r16g2000yqi.googlegroups.com>
In reply to#18994
On Jan 14, 10:23 pm, Steven D'Aprano <steve
+comp.lang.pyt...@pearwood.info> wrote:

> This is not Java, and we prefer Python terminology.
>
> A variable holding an int is an int variable.
> A variable holding a string is a string variable.
> A variable holding a list is a list variable.
> A variable holding an instance is an instance variable.
> A variable holding a class is a class variable.

You went to a lot of trouble to prove nothing. Here allow me to
retort:

A box holding an apple is an apple box.
A box holding a pear is a pear box.
A box holding an orange is a orange box.
A box holding an banana is an banana box.
And a box that penis comes in is a vagina!

> Guessing is for fourth-class programmers who don't know their language
> and are too lazy to RTFM.

Oh really. I don't know about you Steven but i am not JUST a Python
programmer. I write tons of code with Python but i also write tons of
code in many other languages too. Not only am i emerged in many
aspects of the IT world, i have a WIDE scope of knowledge in many
other fields and disciplines; all of which is ongoing because let's
face it, the minute you _think_ you know everything is the second you
become obsolete. But i digress...  Making claims that obfuscated
syntax and insufficient APIs are *somehow* the programmers fault,
because he (or she!) does not have EVERY *SINGLE* corner of the Python
library memorized, is quite preposterous.

> At worst, we might agree that the datetime API is old and tired, and that
> if descriptors existed back in Python 1.x then datetime.weekday could
> have been a computed property instead of a method, but alas we've lost
> the opportunity for this. Any changes to datetime need to be backward
> compatible.

Why? "print()" is not backward compatible? Face it, Guido has broken
Python's cherry. She is no longer pure. You're acting like some over-
protective father. WAKE UP! Python is a promiscuous little whore and
she's on girls gone wild (Volume 4000) shaking her little money maker.
We should at least profit from the immorality.

[toc] | [prev] | [next] | [standalone]


#18998

FromSteven D'Aprano <steve+comp.lang.python@pearwood.info>
Date2012-01-15 07:00 +0000
Message-ID<4f1279a1$0$29987$c3e8da3$5496439d@news.astraweb.com>
In reply to#18997
On Sat, 14 Jan 2012 21:27:32 -0800, Rick Johnson wrote:

> On Jan 14, 10:23 pm, Steven D'Aprano <steve
> +comp.lang.pyt...@pearwood.info> wrote:
> 
>> This is not Java, and we prefer Python terminology.
>>
>> A variable holding an int is an int variable. A variable holding a
>> string is a string variable. A variable holding a list is a list
>> variable. A variable holding an instance is an instance variable. A
>> variable holding a class is a class variable.
> 
> You went to a lot of trouble to prove nothing. Here allow me to retort:
> 
> A box holding an apple is an apple box. A box holding a pear is a pear
> box.
> A box holding an orange is a orange box. A box holding an banana is an
> banana box. And a box that penis comes in is a vagina!

Penises aren't supplied in boxes. About 50% of the population already has 
one, the other 50% can get as many as they want.


>> Guessing is for fourth-class programmers who don't know their language
>> and are too lazy to RTFM.
> 
> Oh really. I don't know about you Steven but i am not JUST a Python
> programmer. I write tons of code with Python but i also write tons of
> code in many other languages too.

Why don't you approach those other languages and demand that they change 
to match Python's model then? See how well that goes over.


>> At worst, we might agree that the datetime API is old and tired, and
>> that if descriptors existed back in Python 1.x then datetime.weekday
>> could have been a computed property instead of a method, but alas we've
>> lost the opportunity for this. Any changes to datetime need to be
>> backward compatible.
> 
> Why? "print()" is not backward compatible? 

You missed your opportunity by two versions. The time to have made the 
change was before Python 3.0 came out. We're now up to 3.2 and 3.3 is 
under development. The opportunity for breaking backward compatibility 
was 3-4 years ago. Now we're back to the normal paradigm of caring about 
backward compatibility.  


> Face it, Guido has broken Python's cherry. She is no longer pure.

You need to get yourself a girlfriend. Or at least a subscription to 
Playboy.



-- 
Steven

[toc] | [prev] | [next] | [standalone]


#19026

FromMichael Torrie <torriem@gmail.com>
Date2012-01-15 19:50 -0700
Message-ID<mailman.4783.1326682263.27778.python-list@python.org>
In reply to#18997
On 01/14/2012 10:27 PM, Rick Johnson wrote:
> Face it, Guido has broken Python's cherry. She is no longer pure.
> You're acting like some over- protective father. WAKE UP! Python is a
> promiscuous little whore and she's on girls gone wild (Volume 4000)
> shaking her little money maker. We should at least profit from the
> immorality.

Hmm, down goes all the credibility you had since your rebirth on this
list.  Back to the old ways.

That said, Rick I think it's time for you to fork python.  Your
brilliance and foresight put Guido's to shame.  No one else has the guts
to stand up and say what needs to be said.  If you can't fix python, no
one can.

[toc] | [prev] | [next] | [standalone]


#19008

FromLie Ryan <lie.1296@gmail.com>
Date2012-01-16 02:13 +1100
Message-ID<mailman.4772.1326640408.27778.python-list@python.org>
In reply to#18977
On 01/15/2012 06:23 AM, Rick Johnson wrote:
> So how do we solve this dilemma you ask??? Well, we need to "mark"
> method OR variable names (OR both!) with syntactic markers so there
> will be NO confusion.
>
> Observe:
>    def $method(self):pass
>    self.@instanceveriable
>    self.@@classvariable

There is no need for a language-level support for Hungarian notation.

[toc] | [prev] | [next] | [standalone]


#18992

FromSteven D'Aprano <steve+comp.lang.python@pearwood.info>
Date2012-01-15 03:53 +0000
Message-ID<4f124db1$0$29987$c3e8da3$5496439d@news.astraweb.com>
In reply to#18974
On Sat, 14 Jan 2012 10:54:57 -0800, Rick Johnson wrote:

> The interface for these modules is not intuitive. Instead of creating
> true OOP objects we have lists and strings.

Lists and strings are true OOP objects.


-- 
Steven

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web