【发布时间】:2019-05-28 20:26:49
【问题描述】:
我想知道是否有办法动态导入整个模块(相当于“import * some_module”)。
在对其他帖子进行一些研究后,我发现您可以动态执行“import some_module”,但不能拉取整个模块。
为了澄清我的问题,
一些模块:
SOME_VARIABLE = 1
模块一:
if(1 == 1):
__import__("some_module");
模块 b:
from module a import *
print(SOME_VARIABLE);
运行此代码会返回无法识别的变量异常,我想防止这种情况发生。
动机:
假设我有一个全局模块,它通过接收参数的函数导入多个其他模块。
例子:
模块一:
import_modules(modules_id):
if(modules_id == 1):
from module_c import *
from module_d import *
else :
from module_e import *
模块 b:
from module a import *
import_modules(1);
我想通过显式调用访问 module_c/d 中的所有变量。
我的实际问题:
我有一个接口驱动程序,它使用不同的协议(每个都通过不同的类实现)与不同的设备交互,这些协议有一定的相似之处,例如:它们都有一个 CUSTOMER_STATUS dict(在 protcol_a/b_global_def 中定义)由特定协议导入的模块)。
我遇到的问题是两个协议都有同名的变量,并且由于接口驱动程序需要识别它们,所以我不知道我从使用接口驱动程序的程序访问哪个变量(导入它) .
考虑到使用接口驱动程序的程序只能动态地知道它需要使用哪个协议,我想避免在程序中手动导入协议 global def(即使我想在程序中使用它的变量)。
【问题讨论】:
-
显示您的代码,以便我们正确参考您的问题。
-
我的问题并不特定于某段代码,但如果您觉得这很重要,我可以解释这样做的动机。
-
那么你的问题没有多大意义。当然也可以动态导入。模块的一部分或整个模块,无论您选择什么。所以要么给出一个反例(在代码中),要么改写它。
-
嘿,我已经改写了它并添加了一个示例。
-
为什么不呢?您的代码将更加不安全,并且难以维护。但是对于python,实用性比纯度要好,所以可能会有有用的案例(我现在看不到)。
标签: python python-3.x