Я хочу иметь несколько файлов, импортированных в общий файл python, а затем включать этот файл, когда мне нужны импортированные модули в текущем модуле. Это, конечно, приведет к ошибкам и повторному импорту, если вы используете импорт из x, но при использовании "нормального" оператора импорта я заканчиваю длинными инструкциями инструкции, например:
x = importModule.directoryName1.directoryName2.moduleName.ClassName()
тогда как я хотел бы сделать следующее:
x = importModule.ClassName()
но, как я уже говорил, сделаю следующее:
from importModule.directoryName1.directoryName2.moduleNam import ClassName
в общем файле не работает, так как я включаю importModule в ClassName.
Итак, я в основном задаюсь вопросом, есть ли вообще что-нибудь вокруг этого (что-то вроде использования оператора, например, на С++, возможно?)
Похоже, что у вас рекурсивный импорт (importModule
относится к moduleName
, а moduleName
относится к importModule
. Если вы используете рефакторинг, вы сможете использовать
from importModule.directoryName1.directoryName2.moduleName import ClassName
Для рефакторинга вы можете изменить порядок, в котором вещи импортируются в moduleName
, чтобы определение класса ClassName
происходило до импорта importModule
; пока каждый файл определяет ссылки, необходимые другому модулю, прежде чем они попытаются импортировать другой модуль, все будет работать.
Другой способ рефакторирования: вы всегда можете импортировать ClassName
в функцию, в которой он используется; пока функция не вызывается до импорта moduleName
, вы будете в порядке.
Лучший способ для рефакторинга состоит в том, чтобы переместить некоторые классы или ссылки в их собственный модуль, поэтому у вас нет ситуации, когда A
импортирует B
и B
импортирует A
. Это исправит вашу проблему, а также упростит работу в будущем.
Ну, вы могли бы сделать
from importModule.directoryName1.directoryName2 import moduleName as importModule
но такой уродливый и очень запутанный, и не забьет вас много очков с помощью программистов на Python, которые позже прочитают ваш код.
moduleName
и module2Name
в одном файле.
import importModule.directoryName1.directoryName2.moduleName as importModule
?