13

模块已经在当前模块中导入(不需要动态导入),并且有一个别名。要求是通过别名获取对模块的引用,并调用其函数

当前模块:

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)会帮助我获得对方法的引用,但是如何通过别名获得对模块的引用?

4

2 回答 2

22

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

getattr(globals()[module_name], function_name)

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

于 2013-06-17T07:12:55.823 回答
5

sys.modules使用 FQN 模块名称获取它,例如"apackage.somemodule"

import sys

getattr(sys.modules[module_name], function_name)

如果模块名称和/或函数可能不存在,请使用它:

mod = sys.modules.get(module_name)
fn = mod and getattr(mod, function_name, None)
于 2020-03-31T20:13:37.450 回答