Question
Asked By – Matt Joiner
What do I pass as the first parameter “object
” to the function setattr(object, name, value)
, to set variables on the current module?
For example:
setattr(object, "SOME_CONSTANT", 42);
giving the same effect as:
SOME_CONSTANT = 42
within the module containing these lines (with the correct object
).
I’m generate several values at the module level dynamically, and as I can’t define __getattr__
at the module level, this is my fallback.
Now we will see solution for issue: How do I call setattr() on the current module?
Answer
import sys
thismodule = sys.modules[__name__]
setattr(thismodule, name, value)
or, without using setattr
(which breaks the letter of the question but satisfies the same practical purposes;-):
globals()[name] = value
Note: at module scope, the latter is equivalent to:
vars()[name] = value
which is a bit more concise, but doesn’t work from within a function (vars()
gives the variables of the scope it’s called at: the module’s variables when called at global scope, and then it’s OK to use it R/W, but the function’s variables when called in a function, and then it must be treated as R/O — the Python online docs can be a bit confusing about this specific distinction).
This question is answered By – Alex Martelli
This answer is collected from stackoverflow and reviewed by FixPython community admins, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0