tomer filiba schrieb:
> my question is, how come classes don't create cell variables, like
> normal functions? 

Not sure what you mean by "how come"? Why is the implementation
reacting as it is? Because the body of class is compiled as
a global code fragment, not as a nested one.
Or why is the implementation the way it is? For several reasons,
one being that classes predate nested functions.

> was this done on purpose? 

Yes. Attributes defined inside a class are assumed to be accessed
through attribute access *only*. So you write

  self.foo()

to invoke a method, instead of invoking

  foo()

Python treats methods and data attributes uniformly, so the
same applies to data variables.

> does it have to
> do with inheritance? if so, what's wrong with my "bar" version?

It also has to do with inheritance. If you do self.foo, it looks
1. in the object itself
2. in the class of the object
3. in the bases of the class of the object (recursively)

It would be counter-intuitive if some things (i.e. things defined
in the class itself) could be accessed directly, whereas other things
(ie. attributes of the object itself, and things in the base classes)
would need to be accessed through qualification. It would also be
counter-intuitive if you find methods in an unqualified manner,
but then can't call them because you didn't give a self argument.

If you don't follow this reasoning, please write a counter-proposal
so that people have something to shoot down.

Regards,
Martin
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to