How do I call setattr() on the current module? How do I call setattr() on the current module? python python

How do I call setattr() on the current module?


import systhismodule = 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).


In Python 3.7, you will be able to use __getattr__ at the module level (related answer).

Per PEP 562:

def __getattr__(name):    if name == "SOME_CONSTANT":        return 42    raise AttributeError(f"module {__name__} has no attribute {name}")


If you must set module scoped variables from within the module, what's wrong with global?

# my_module.pydef define_module_scoped_variables():    global a, b, c    a, b, c = 'a', ['b'], 3

thus:

>>> import my_module>>> my_module.define_module_scoped_variables()>>> aNameError: name 'a' is not defined>>> my_module.a'a'>>> my_module.b['b']