Импорт Python - PullRequest
       25

Импорт Python

2 голосов
/ 17 марта 2010

У меня есть файл, myfile.py, который импортирует Class1 из file.py, а file.py содержит импорт в различные классы в file2.py, file3.py, file4.py.

Вмой myfile.py, могу ли я получить доступ к этим классам или мне нужно снова импортировать file2.py, file3.py и т. д .?

Может ли Python автоматически добавлять все импортные файлы, включенные в импортированный мной файл, и можетЯ использую их автоматически?

Ответы [ 4 ]

10 голосов
/ 17 марта 2010

Рекомендуется импортировать каждый модуль, который определяет нужные вам идентификаторы, и использовать эти идентификаторы как квалифицированный по имени модуля; Я рекомендую использовать from только тогда, когда вы импортируете модуль из пакета. Вопрос часто обсуждался на SO.

Импорт модуля, скажем, moda, из многих модулей (скажем, modb, modc, modd, ...), которым требуется один или несколько идентификаторов, определяемых moda, не замедляет вас down: moda байт-код загружается (и, возможно, собирается из его источников, если это необходимо) только один раз, при первом moda импорте куда-либо, тогда во всех остальных импорте модуля используется быстрый путь с использованием кеша (a dict отображает имена модулей на объекты модулей, которые доступны как sys.modules в случае необходимости ... если вы сначала import sys, конечно! -).

1 голос
/ 17 марта 2010

Python не вносит ничего автоматически в пространство имен myfile.py, но вы можете получить доступ ко всему, что находится в пространствах имен всех других модулей.

То есть, если в file1.py вы сделали from file2 import SomeClass, а в myfile.py вы сделали import file1, то вы можете получить к нему доступ в myfile как file1.SomeClass. Если в file1.py вы сделали import file2, а в myfile.py вы сделали import file1, то вы можете получить доступ к классу из myfile как file1.file2.SomeClass. (Как правило, это не лучший способ сделать это, особенно не второй пример.)

Это легко проверить.

0 голосов
/ 17 марта 2010

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

0 голосов
/ 17 марта 2010

В модуле myfile вы можете сделать from file import ClassFromFile2 или from file2 import ClassFromFile2 для доступа к ClassFromFile2, при условии, что класс также импортирован в файл.

Этот метод часто используется для упрощения API. Например, модуль db.py может импортировать различные вещи из модулей mysqldb, sqlalchemy и некоторых других помощников. Затем ко всему можно получить доступ через модуль db.

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