获取函数对应的模块
我想修改一个叫做xyz的模块和它的一些功能,像这样:
def modify(fun):
modulename = fun.__module__ # this is string. ok, but not enough
import xyz
modify(xzy.test)
我遇到的问题是,如何在modify
这个函数里访问xyz
的命名空间。有时候
globals()[fun.__module__]
这样做是可以的。但如果modify
的定义在一个和其他代码不同的文件里,我就会遇到问题。
4 个回答
13
你可以试试这个
modulename = fun.__module__
module = __import__(modulename)
51
使用inspect模块:
import inspect
def modify(fun):
module = inspect.getmodule(fun)
这和通过sys.modules
来查看模块,使用fun.__module__
是一样的。不过,getmodule
会更加努力地去查找,即使fun
没有__module__
这个属性。
36
你想通过名字获取模块对象吗?可以在 sys.modules
这个字典里查找,它里面包含了所有当前加载的模块:
import sys
def modify(func):
module = sys.modules[func.__module__]