Python 3K or Python 2.9?

Aahz aahz at pythoncraft.com
Fri Sep 14 04:41:31 CEST 2007


In article <1i4bm7a.1s51u591kreqe4N%aleax at mac.com>,
Alex Martelli <aleax at mac.com> wrote:
>Chris Mellon <arkanes at gmail.com> wrote:
>> 
>> and I'll punch a kitten before I accept having to read
>> Python code guessing if something is a global, a local, or part of
>> self like I do in C++.
>
>Exactly: the technical objections that are being raised are bogus, and
>the REAL objections from the Python community boil down to: we like it
>better the way it is now.  Bringing technical objections that are easily
>debunked doesn't _strengthen_ our real case: in fact, it _weakens_ it.
>So, I'd rather see discussants focus on how things SHOULD be, rather
>than argue they must stay that way because of technical difficulties
>that do not really apply.
>
>The real advantage of making 'self' explicit is that it IS explicit, and
>we like it that way, just as much as its critics detest it.  Just like,
>say, significant indentation, it's a deep part of Python's culture,
>tradition, preferences, and mindset, and neither is going to go away (I
>suspect, in fact, that, even if Guido somehow suddenly changed his mind,
>these are issues on which even he couldn't impose a change at this point
>without causing a fork in the community).  Making up weak technical
>objections (ones that ignore the possibilities of __get__ or focus on
>something so "absolutely central" to everyday programming practice as
>inspect.getargspec [!!!], for example;-) is just not the right way to
>communicate this state of affairs.

While you have a point, I do think that there is no solution that allows
the following code to work with no marker distinguishing the local bar
from the instance's bar; the only question is how you want to mark up
your code:

class C:
    def foo(self, bar):
        print bar, self.bar

x = C()
x.bar = 'abc'
x.foo()

>From that standpoint, there is a technical objection involved.  Of
course, the solution can be any of a number of different marker systems
(or even choosing to have no marker and not permit a method to access
both object attributes and locals of the same name), and Python has
chosen to force the use of a marker for all object attributes, while also
choosing to have disjoint namespaces WRT globals and locals for any one
name.
-- 
Aahz (aahz at pythoncraft.com)           <*>         http://www.pythoncraft.com/

"Many customs in this life persist because they ease friction and promote
productivity as a result of universal agreement, and whether they are
precisely the optimal choices is much less important." --Henry Spencer
http://www.lysator.liu.se/c/ten-commandments.html



More information about the Python-list mailing list