2016-04-22 2 views
0

Так что я довольно глубоко встраиваюсь в настраиваемый модуль пользовательского менеджера задач/процессов, и когда мне нужно интегрировать его, я наткнулся на взаимодействие, которое я раньше не видел с модулями и пространствами имен ,Импортированные пространства импортеров mod.submodule, мешающие друг другу

Кодекс говорит лучше, чем слова:

Таким образом, есть два несколько различных сценариев:

test1:

import jobManager 

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

И test2:

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 являются фактически такое же пространство имен? Есть ли способ удержать их отдельно?

ответ

1

Это только случай, когда test1.jobManager и test2.jobManager на самом деле являются тем же самым пространством имен?

Да.

Есть ли способ удержать их отдельно?

Не без создания другого модуля.

+0

Так будет ли обходным путем обертывать все это в классе и инициализировать его внутри каждого из соответствующих модулей? Или есть другой способ? – user3593486

+0

Я удивлен, что это то, с чем я не сталкивался раньше, это просто случай, когда использование глобальных переменных может стать беспорядочным? Или есть другие ямы, за которыми я должен следить? – user3593486

+0

Если у вас несколько независимых экземпляров поведения, то класс - это путь. Другая ошибка, на которую следует обратить внимание, - это когда модуль можно найти несколькими способами через 'sys.path'; можно импортировать один и тот же модуль несколькими разными способами *, но это дегенеративное поведение и не должно использоваться для «решения» проблемы выше *. –

Смежные вопросы