【问题标题】:imported module.submodule namespaces interfering with eachother导入的 module.submodule 命名空间相互干扰
【发布时间】:2016-04-22 02:22:58
【问题描述】:

所以我非常深入地制作自定义作业/流程自定义管理器模块,当我开始集成它时,我遇到了我以前从未见过的与模块和命名空间的交互。

代码胜于雄辩:

所以有两个略有不同的脚本:

测试1:

import jobManager

jobManager.jobMap = {'test1':'test123'}

与测试2:

import jobManager

jobManager.jobMap = {'test2':'test222'}

顶级脚本:

import test1
import test2

print(test1.jobManager.jobMap)
print(test2.jobManager.jobMap)

所以当我运行它打印的顶级脚本时:

{'test2':'test222'}
{'test2':'test222'}

但我的预期输出是:

{'test1':'test123'}
{'test2':'test222'}

这只是 test1.jobManager 和 test2.jobManager 实际上是同一个命名空间的情况吗?有没有办法让它们分开?

【问题讨论】:

    标签: python-3.2


    【解决方案1】:

    这只是 test1.jobManager 和 test2.jobManager 实际上是同一个命名空间的情况吗?

    是的。

    有没有办法让它们分开?

    必须创建另一个模块。

    【讨论】:

    • 那么解决方法是将它全部包装在一个类中,并在每个相关模块中对其进行初始化吗?还是有其他方法?
    • 我很惊讶这是我以前没有遇到过的事情,这只是使用全局变量会变得混乱的情况吗?或者还有其他我应该注意的坑吗?
    • 如果你有多个独立的行为实例,那么一个类就是要走的路。另一个需要注意的陷阱是当一个模块可以通过sys.path 以多种方式找到时;可以通过多种不同的方式导入同一个模块,但这是退化的行为,不应用于“解决”上述问题
    猜你喜欢
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 2013-05-09
    相关资源
    最近更新 更多