импорт оператора беспорядок в питоне - PullRequest
1 голос
/ 02 июля 2010

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

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

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

x = importModule.ClassName()

, но, как я уже говорил, сделать это:

from importModule.directoryName1.directoryName2.moduleNam import ClassName

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

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

Ответы [ 2 ]

3 голосов
/ 02 июля 2010

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

from importModule.directoryName1.directoryName2.moduleName import ClassName

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

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

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

2 голосов
/ 02 июля 2010

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

from importModule.directoryName1.directoryName2 import moduleName as importModule

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...