python - создать глобальную переменную и изменить ее импорт в директорию __init__ file - PullRequest
0 голосов
/ 14 июля 2020

У меня следующая файловая структура:

/f1
 - __init__.py
 - m1.py
/f2
 - __init__.py
 - m2.py

m1.run() вызывает m2.run(conf) и передает некоторую конфигурацию для создания экземпляра класса C. Что мне нужно сделать с sh, так это сделать этот экземпляр C доступным глобально, но импортировать его на уровне каталога. Есть ли способ создать этот экземпляр внутри m2.run(conf), но затем быть доступным с помощью from f2 import c.

UPDATE:

Я объявляю c=None в f2.__init__, а затем устанавливаю его до C() в m2.run(). Проблема в том, что любой модуль, который импортирует c до вызова m2.run, всегда будет иметь c, равное None. Любой способ обойти эту проблему, чтобы c обновлялся в реальном времени

1 Ответ

0 голосов
/ 14 июля 2020

Во-первых, m1 должен импортировать f2.m2, чтобы запустить m2.run. Это приводит к определению модуля f2.

# in m1.py

import f2.m2

def run():
    f2.m2.run(...)

Затем выполните m2 (повторно) импорт f2 и установите C напрямую.

# In m2.py
import f2

def run(conf):
    f2.C = "Hi there"

Теперь , если вы впервые запустите f1.m1.run(), у существующего модуля f2 будет установлен атрибут C, когда вы попытаетесь импортировать f2 самостоятельно.

>>> import f1.m1
>>> f1.m1.run()
>>> from f2 import C
>>> C
'Hi there'
     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...