Python字符串到模块引用

问题描述 投票:0回答:1

有没有一种方法可以从一个字符串中 "引用 "一个模块?例如,下面的内容很重复。

module = "module1"

if module == "module1":
    module1.function1()
elif module == "module2":
    module2.function1()
elif module == "module3":
    module3.function1()

# Other code...

if module == "module1":
    module1.function2()
elif module == "module2":
    module2.function2()
elif module == "module3":
    module3.function2()

所以我想知道是否有更好的方法来做,比如说 exec(module).function1() (这一点,没有用,可能也不安全......)

另外,有没有更好的方法来编码这种类型的东西?每个文件都是针对不同的站点,但有相同的功能。

python python-3.x
1个回答
3
投票

如果你的字符串和你的模块名称不同,你可以在程序开始时设置一个dict。

import module1
import module2

modules = {
  "module1": module1,
  "module2": module2,
  ...
}
...

modules[moduleName].function1()
modules[moduleName].function2()

如果你的字符串总是和模块的名字一样, 那么你可以使用... ... importlib:

from importlib import import_module

...

import_module(moduleName).function1()
import_module(moduleName).function2()
© www.soinside.com 2019 - 2024. All rights reserved.