импорт оператора беспорядок в питоне

1

Я хочу иметь несколько файлов, импортированных в общий файл python, а затем включать этот файл, когда мне нужны импортированные модули в текущем модуле. Это, конечно, приведет к ошибкам и повторному импорту, если вы используете импорт из x, но при использовании "нормального" оператора импорта я заканчиваю длинными инструкциями инструкции, например:

x = importModule.directoryName1.directoryName2.moduleName.ClassName()

тогда как я хотел бы сделать следующее:

x = importModule.ClassName()

но, как я уже говорил, сделаю следующее:

from importModule.directoryName1.directoryName2.moduleNam import ClassName

в общем файле не работает, так как я включаю importModule в ClassName.

Итак, я в основном задаюсь вопросом, есть ли вообще что-нибудь вокруг этого (что-то вроде использования оператора, например, на С++, возможно?)

Теги:
import
using-statement

2 ответа

3
Лучший ответ

Похоже, что у вас рекурсивный импорт (importModule относится к moduleName, а moduleName относится к importModule. Если вы используете рефакторинг, вы сможете использовать

from importModule.directoryName1.directoryName2.moduleName import ClassName

Для рефакторинга вы можете изменить порядок, в котором вещи импортируются в moduleName, чтобы определение класса ClassName происходило до импорта importModule; пока каждый файл определяет ссылки, необходимые другому модулю, прежде чем они попытаются импортировать другой модуль, все будет работать.

Другой способ рефакторирования: вы всегда можете импортировать ClassName в функцию, в которой он используется; пока функция не вызывается до импорта moduleName, вы будете в порядке.

Лучший способ для рефакторинга состоит в том, чтобы переместить некоторые классы или ссылки в их собственный модуль, поэтому у вас нет ситуации, когда A импортирует B и B импортирует A. Это исправит вашу проблему, а также упростит работу в будущем.

  • 1
    +1 абзац, который начинается «Лучший путь».
2

Ну, вы могли бы сделать

from importModule.directoryName1.directoryName2 import moduleName as importModule

но такой уродливый и очень запутанный, и не забьет вас много очков с помощью программистов на Python, которые позже прочитают ваш код.

  • 0
    Не работает, если вы хотите импортировать из moduleName и module2Name в одном файле.
  • 2
    Почему бы вам просто не import importModule.directoryName1.directoryName2.moduleName as importModule ?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню