Более чистый ответ - это сочетание хорошего ответа Катскула и использования Охадом Коэном sys.module
и прямого переопределения:
import sys
Y = reload(sys.module["X"]).Y # reload() returns the new module
Фактически, выполнение import X
создает новый символ (X
)это может быть переопределено в следующем коде, который не является необходимым (тогда как sys
является общим модулем, поэтому этого не должно происходить).
Интересно, что from X import Y
не добавляет X
в пространство имен, но добавляет модуль X
в список известных модулей (sys.modules
), что позволяет перезагрузить модуль (и получить доступ к его новому содержимому).
В более общем случае, если несколько импортированныхСимволы необходимо обновить, тогда удобнее импортировать их так:
import sys
reload(sys.module["X"]) # No X symbol created!
from X import Y, Z, T