Each Answer to this Q is separated by one/two green lines.
I want to modify a module xyz and its functions like that:
def modify(fun): modulename = fun.__module__ # this is string. ok, but not enough import xyz modify(xzy.test)
My problem is how to access the namespace of
works. But then I get problems if the definition
modify is in a different file than the rest of
Use the inspect module:
import inspect def modify(fun): module = inspect.getmodule(fun)
This is the same as polling the module from
getmodule tries harder even if
fun does not have a
You want to get the module object from its name? Look it up in the
sys.modules dictionary that contains all currently loaded modules:
import sys def modify(func): module = sys.modules[func.__module__]
You could try
modulename = fun.__module__ module = __import__(modulename)
You do not want to do this.
It does not work. Imagine you defined a function in module
abcand then imported it in
'abc'when you called
modify(xyz.test). You would then know to change
abc.testand you would not end up modifying
Monkey patching should be avoided. Fooling with the global state of your program is ill-advised. Instead of doing this, why cannot you just make the new, modified thing and use it?