[Edu-sig] Re: python vs php5
Michael McLay
mmclay at comcast.net
Thu Dec 4 10:49:03 EST 2003
On Wednesday 03 December 2003 06:09 pm, Lee Harr wrote:
> >i've heard that php5 will include declaration of attributes which are
> >private,
> >public and protected... aside from that interfaces which will be
> >implemented by
> >a class can also be created...
> >
> >in line with OO principles, wouldnt these features be good if implemented
> >in
> >python???
This question be more appropriate for the main python mailing list.
>
> You may want to join this list:
>
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/python-interfaces
>
> which has been set up to talk about interfaces in python. There are at
> least three interface systems already (zope, twisted, and pyprotocols).
>
> I think that python will bring some very interesting developments to
> interfaces, but I don't think that excessive restrictions will be part of
> the mix. Instead, it will be more about making systems more flexible
> and more easily extensible by easing discovery of new things that
> support the interfaces you are interested in.
Interface definitions and the ability to make some members of a class private
or protected are separate issues. The jury is still out on how Python
interfaces will be defined. Python has had private members dating back to
around Python 1.5. They aren't used or talked about much. Probably because it
is very easy to subvert the minimal protection they provide to the class
designer. It is also probably the case that private and protected are an over
hyped and over used feature in Java and C++. In what sense do they protect
your program?
A recent article [1] on using Java describes how to use reflection to subvert
access protection for unit testing. The article shows how to peek inside an
object to "get" or "set" a private or protected member. The article states,
"the [Java] security layer preventing you from accessing private members is
only optional, and can be turned off." (It is only optional for programs that
are not executed as applets. The Java Security Manager enforces access
control on unsigned applets. Application that run signed applets can set the
access rules for the applets.)
So the protected and private members of Java aren't as protected and private
as might be expected. For trusted code these members are no more private and
protected than the private types in Python that can be defined using the "__"
prefix. (It is more work to get and set the members, but they are not safer
than Python.)
The notion of making some members private and protected are in conflict with
the introspection capability of Python (as well as reflection in Java). It
has been said that Python is for "consenting adults". (It's probably not the
best phrase for capturing the idea.) Python trusts programmers to not do
stupid things by subverting the minimal protection provided by the "__"
prefix. People who bypass this protection know that bad things can happen.
Using the private and protected declarations in a language as a security
measure in a dynamic language is not a reliable way to prevent promiscuous
programming. Stronger measure are needed, such building a sandbox in which
the untrusted code is executed in a separate physical address space. Another
approach is to provide a weakened language parser that limits potential
problems caused by untrusted code. It is my understanding that Zope security
for less trustworthy code uses a hobbled parser that limits the available
Python language features. This includes turning off introspection features.
Why do you think adding private and protected members would make Python a
better language? Would it be better, or just more like other language? Would
it be better, or just harder to learn?
[1] http://www.onjava.com/pub/a/onjava/2003/11/12/reflection.html
More information about the Edu-sig
mailing list