如何通过字符串名称引用模块并按字符串名称调用其方法?

时间:2013-06-17 07:09:29

标签: python

模块已导入当前模块(无需动态导入),并具有ALIAS名称。 要求是通过别名来引用模块,并调用其函数

当前模块:

import libraries.mymaths.products as myproductlib

def call_func(module_name,method_name):
    # module_name = 'myproductlib' , method_name='mult'
    # how to call myproductlib.mult here ?

getattr(MODULE_REF, method_name)会帮助我获取方法的引用,但是如何通过别名来引用模块?

2 个答案:

答案 0 :(得分:9)

要获取该模块,您可以使用globals。要获得此功能,请使用getattr

getattr(globals()[module_name], function_name)

导入模块只是将模块对象绑定到您导入它的任何命名空间中的名称。在通常情况下,您在模块的顶层导入,这意味着它会创建一个全局变量。

答案 1 :(得分:0)

"apackage.somemodule"之类的FQN模块名称从sys.modules获取它

import sys

getattr(sys.modules[module_name], function_name)

如果模块名称和/或功能可能不存在,请使用此选项:

mod = sys.modules.get(module_name)
fn = mod and getattr(mod, function_name, None)