My python annoyances so far

James Stroud jstroud at mbi.ucla.edu
Wed Apr 25 20:06:53 EDT 2007


flifus at gmail.com wrote:
> Hi all. I'm learning python these days. I'm going to use this thread
> to post, from time to time, my annoyances with python.

Please start a new thread for each annoyance. Overuse of a single thread 
  is an annoyance to a great many people.

> I hope someone
> will clarify things to me where I have misunderstood them.

Perhaps substitute "annoyance" with "misunderstanding" to garner the 
friendliness of your python peers.

> Annoyances:

You mean "Misunderstandings:"

> 1. Underscores! What's the deal with that? Especially those double
> underscores. The best answer I read on this is that the double
> underscores denotes special methods that the interpreter may
> automatically use. For example, 4+4 get expanded by the interpreter to
> 4.__add__(4).

The double underscores are probably not the most aesthetic feature of 
the language. By the time you know how and when to use them, they will 
not bother you at all and so you will be scratching #1 off your list.

> 2. There are modules, there are functions, and there are classes-
> methods! Wouldn't it have been easier had everything either been a
> function or a class method?
> 

Do you mean "unbound methods" or "class methods"? They are essentially 
the same as functions unless you get into the internals of python, which 
means you are going out of your way to look for annoyances. Such 
behavior will lead to frustration and, eventually, abject ennui.

So you should strike your latter point off your list of 
annoyances...misunderstandings. For example:


py> class Thing(object):
...   doit = classmethod(doit)
...
py> Thing.doit(88)
Param is "param".
py> Thing.doit(object())
Param is "param".
py> def doit(athing, param):
...   print 'Param is "%s".' % param
...
py> class Thing(object):
...   doit = doit
...
py> t = Thing()
py> t.doit(4)
Param is "4".



If your latter misunderstanding is about the lack of actual class 
methods, then consider:


py> class Thing(object):
...   doit = classmethod(doit)
...
py> Thing.doit(4)
Param is "4".


James



More information about the Python-list mailing list