[Python-Dev] Early PEP draft (For Python 3000?)
Eyal Lotem
eyal.lotem at gmail.com
Tue Oct 11 23:31:42 CEST 2005
I would like to re-suggest a suggestion I have made in the past, but
with a mild difference, and a narrower scope.
Name: Attribute access for all namespaces
Rationale: globals() access is conceptually the same as setting the
module's attributes but uses a different idiom (access of the dict
directly). Also, locals() returns a dict, which implies it can affect
the local scope, but quietly ignores changes. Using attribute access
to access the local/global namespaces just as that is used in instance
namespaces and other modules' namespaces, could reduce the mental
footprint of Python.
Method: All namespace accesses are attribute accesses, and not direct
__dict__ accesses. Thus globals() is replaced by a "module" keyword
(or "magic variable"?) that evaluates to the module object. Thus,
reading/writing globals in module X, uses getattr/setattr on the
module object, just like doing so in module Y would be. locals()
would return be replaced by a function that returns the frame object
(or a weaker equivalent of a frame object) of the currently running
function. This object will represent the local namespace and will
allow attribute getting/setting to read/write attributes. Or it can
disallow attribute setting.
Examples:
global x ; x = 1
Replaced by:
module.x = 1
or:
globals()[x] = 1
Replaced by:
setattr(module, x, 1)
locals()['x'] = 1 # Quietly fails!
Replaced by:
frame.x = 1 # Raises error
x = locals()[varname]
Replaced by:
x = getattr(frame, varname)
Advantages:
- Python becomes more consistent w.r.t namespacing and scopes.
Disadvantages:
- "module" is already possible by importing one's own module, but that is:
* Confusing and unnecessarily requires naming one's self
redundantly (Making renaming of the module a bit more difficult).
* Not easily possible in a __main__/importable module.
* No equivalent for locals()
- Automatic script conversion may be difficult in some use cases of
globals()/locals()
More information about the Python-Dev
mailing list