[Python-Dev] Re: closure semantics

Alex Martelli aleaxit at yahoo.com
Sat Oct 25 03:21:40 EDT 2003


On Friday 24 October 2003 23:10, Phillip J. Eby wrote:
> At 01:39 PM 10/24/03 -0700, Zack Weinberg wrote:
> >class foo:
> >    A = 1  # these are class variables
> >    B = 2
> >    C = 3
   ...
> >thought A, B, C were instance variables, although it wasn't hard to
> >understand why they aren't.
>
> A, B, and C *are* instance variables.  Why do you think they aren't?

They're _accessible AS_ instance attributes (self.B will be 2 in a method),
but they have the same value in all instances and to _rebind_ them you
need to do so on the class object (you can bind an instance variable with
the same name to shadow each and any of them, of course).

> What good does declaring the set of instance variables *do*?  This seems

It decreases productivity -- that's the empirical result of Prechelt's study
and the feeling of people who have ample experience with both kinds of
language (cfr Robert Martin's well-known blog for an authoritative one, but
my own experience is quite similar).
If you subscribe to the popular fallacy known as "lump of labour" -- there
is a total fixed amount of work that needs to be done -- it would follow 
that diminishing productivity increases the number of jobs available.  Any
economist would be appalled, of course, but, what do THEY know?-)

> to be more of a mental comfort thing than anything else.  I've spent most
> of my career in declaration-free languages, though, so I really don't
> understand why people get so emotional about being able to declare their
> variables.

Most of MY work has been with mandatory-declaration languages, and my
theory is that a "Stockholm Syndrome" is in effect (google for a few tens of
thousands of explanations of that syndrome).


> >  and there is no other way in the language?
>
> Actually, there are a great many ways to implement such a thing.  One way

For instance variables, yes.  Fewer for class variables (you need a custom
metaclass).  None for module variables (also misleadingly known as 'global'
ones) nor for local variables.


Alex




More information about the Python-Dev mailing list