Virgin keyword (Was: Will python never intend to support private, protected and public?)
Roy Smith
roy at panix.com
Sun Oct 2 14:21:28 EDT 2005
"El Pitonero" <pitonero at gmail.com> wrote:
> Python's lack of Java-style "private" surely has its drawback: name
> collisions can happen. But, that's just one side. Name collisions are
> allowed in many dynamic languages, where you can override the default
> system behavior (in some languages, you can override/intercept the
> assignment operator "=", or even the "if" statement and the "while"
> loop.) Sure, in these very dynamic languages you can ACCIDENTALLY
> override the default system behavior. How many Python programmers have
> once upon a time done stupid things like:
>
> list = 3
>
> , without realizing that list() is a Python function? This type of
> accidental overriding DOES happen. Similarly, in large and complicated
> Python projects, name collision (even for "self._x" type of private
> members) CAN happen, and I am sure it has happened for some people.
I think everybody would agree that accidentally overwriting a name because
you didn't realize it was defined in an enclosing context is a Bad Thing.
The classic (C++/Java) solution has been to have classes protect their
members from outside exposure.
I wonder if a better solution would be to have the protection applied from
the other end? Imagine if we had a "virgin" keyword which could modify the
assignment statement to assert that the name being assigned to was not
currently in use. Thus
virgin x = y
would be treated sort of as if it had been written (ignore, for the moment,
the possible side effects of the extra eval of x)
try:
x
except NameError:
throw ChastityError
else:
x = y
This would provide you protection from stomping on names by accident, but
it would allow you to stomp all you wanted if you wanted to.
More information about the Python-list
mailing list