Так что я довольно глубоко встраиваюсь в настраиваемый модуль пользовательского менеджера задач/процессов, и когда мне нужно интегрировать его, я наткнулся на взаимодействие, которое я раньше не видел с модулями и пространствами имен ,Импортированные пространства импортеров 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 являются фактически такое же пространство имен? Есть ли способ удержать их отдельно?
Так будет ли обходным путем обертывать все это в классе и инициализировать его внутри каждого из соответствующих модулей? Или есть другой способ? – user3593486
Я удивлен, что это то, с чем я не сталкивался раньше, это просто случай, когда использование глобальных переменных может стать беспорядочным? Или есть другие ямы, за которыми я должен следить? – user3593486
Если у вас несколько независимых экземпляров поведения, то класс - это путь. Другая ошибка, на которую следует обратить внимание, - это когда модуль можно найти несколькими способами через 'sys.path'; можно импортировать один и тот же модуль несколькими разными способами *, но это дегенеративное поведение и не должно использоваться для «решения» проблемы выше *. –