how to write-protect names

python python at sarcastic-horse.com
Wed Sep 17 19:27:50 EDT 2003


Can you post a trivial example of how to use __setattr__() and how to
set the namespace in the interpreter?

Thanks.


On Wed, 17 Sep 2003 17:42:19 -0400
Peter Hansen <peter at engcorp.com> wrote:

> Gregor Lingl wrote:
> > 
> > Peter Hansen schrieb:
> > 
> > > What exactly do you need this for?  If you describe the purpose
> > > you have in mind for it we can provide the best approach, or
> > > tell you that we don't think you should bother. ;-)
> > >
> > > -Peter
> > 
> > I'm writing a module for teaching young students. It contains
> > e. g. a function width, which assigns a value to some (hidden)
> > variable:
> > 
> >  >>> width(5)
> > 
> > Now my experience is, that from time to time some of my
> > students write (erroneously)
> > 
> >  >>> width = 5
> > 
> > which renders the function width unaccessible for future
> > use. 
> 
> Ah, good.  In that case the answer is fairly simple.  You
> cannot "write-protect" the name in the main module, but you
> could use your own namespace for the methods such as width(),
> putting them in something that looks like a module but is 
> really an object with a __setattr__() method which prevents
> "overwriting" any of the existing names.  Maybe util.width()
> or something like that.
> 
> The fundamental issue is really that names are merely labels
> for the things themselves, and can be rebound at will.  The
> students aren't really overwriting anything, and the original 
> width() method still exists (if any other binding to it exists
> anywhere), they are simply making the label "width" reference
> a different object and you can't that without providing your
> own interactive environment, I suspect.
> 
> (And as a result, you still can't stop the students from binding
> the name "util" to something else and still screwing up the above,
> but perhaps you can trust the students not to do this if you
> demonstrate it and explain why it's a bad idea.)
> 
> -Peter
> -- 
> http://mail.python.org/mailman/listinfo/python-list





More information about the Python-list mailing list