Shouldn't return 'xx' be return self['xx'
I don't know why precisely you're using a class as a global namespace, not that I personally find fault with it. But here are some other things you can do. Idea one: ====================================================== class NS(object): """place to put junk""" ns = NS() ns.global_var1 = "SPAM and eggs" ns.global_var2 = "use as you like just prefix with ns." del ns.global_var # because I'm fickle dir(ns) Idea two: ====================================================== Instead of a class as a global namespace, use a module ns.py ------ """My global namespace""" # do not import anything or make # classes or run functions here, just a place to have varibles ns_var = "var defined in ns.py" ignore = ['__builtins__', '__class__', '__delattr__', '__dict__', '__doc__', '__file__', '__format__', '__getattribute__', '__hash__', '__init__', '__name__', '__new__', '__package__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__'] main.py -------- import ns import mod1 import mod2 import mod3 ns.main_var = "this is main var" ns.mod3_var = mod3.mod3_var ns.mod3_somefunc_var = mod3.somefunc.somefunc_var mod3.show( "ns.ns_var", ns.ns_var) mod3.show( "ns.main_var", ns.main_var) mod3.show( "ns.mod1_var", ns.mod1_var) mod3.show( "ns.mod2_var", ns.mod2_var) mod3.show( "ns.somefunc_var", ns.somefunc_var) mod3.show( "ns.mod3_var", ns.mod3_var) mod3.show( "ns.mod3_somefunc_var", ns.mod3_somefunc_var) mod3.show( "dir(ns)", dir(ns)) mod3.list_globals() mod1.py ------- import ns # good usage; var not in mod1 global namespace and value is not copied # from one namespace to another but just put in it. ns.mod1_var = "this is text in mod1" # therefore by doing this your code in mod1 is likely to use # ns.mod1_var and not just mod1_var -is- not ns.mod1_var mod2.py ------- import ns ns.mod2_var = "text in mod2" def somefunc(): # good app globals ns.somefunc_var = "make a var not in the global namespace of the mod2" ns.renamed_var = "rename this" somefunc() mod3.py ------- # mod3_var is misleading; because you might use it but mod3.mod3_var # would not be the same value as the ns.mod3_var mod3_var = "not assigned to ns from in mod3.py but from main.py" def somefunc(): # bad globals somefunc.somefunc_var = "make a var not in the global namespace of the mod3" somefunc.renamed_var = "rename this" somefunc() # instinate somefunc_var def show(astring, avalue): print astring print ' ', str(avalue) def list_globals(): print 'ns variable list' import ns print ' [', for item in dir(ns): if not item in ns.ignore: print "'" + item.strip() + "', ", print ']' -- http://mail.python.org/mailman/listinfo/python-list