Ron_Adam <[EMAIL PROTECTED]> wrote in message news:<[EMAIL PROTECTED]>...
> Is there a way to hide global names from a function or class?
> 
> I want to be sure that a function doesn't use any global variables by
> mistake.  So hiding them would force a name error in the case that I
> omit an initialization step.  This might be a good way to quickly
> catch some hard to find, but easy to fix, errors in large code blocks.

def noglobals(f):
.   import new
.   return new.function(
.       f.func_code, 
.       {'__builtins__':__builtins__},
.       f.func_name, 
.       f.func_defaults, 
.       f.func_closure
.   )

You can use it with the Python 2.4 @decorator syntax:

@noglobals
def a(...):
.   # code here

Doing this for a class is a little more work. You will need dig inside
to perform this treatment on each method separately and handle new and
old-style classes a bit differently.

Note that this kind of function may declare globals. They will be
persistent but private to the function.

  Oren
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to