Each Answer to this Q is separated by one/two green lines.
What do I pass as the first parameter “
object” to the function
setattr(object, name, value), to set variables on the current module?
setattr(object, "SOME_CONSTANT", 42);
giving the same effect as:
SOME_CONSTANT = 42
within the module containing these lines (with the correct
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.
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).
If you must set module scoped variables from within the module, what’s wrong with
# my_module.py def define_module_scoped_variables(): global a, b, c a, b, c="a", ['b'], 3
>>> import my_module >>> my_module.define_module_scoped_variables() >>> a NameError: name 'a' is not defined >>> my_module.a 'a' >>> my_module.b ['b']
- You wouldn’t. You would do
globals()["SOME_CONSTANT"] = 42
- You wouldn’t. You would store dynamically-generated content somewhere other than a module.