Как импортировать класс в пределах той же директории или поддиректории?
У меня есть каталог, в котором хранятся все файлы .py:
bin/
main.py
user.py # здесь находится класс User
dir.py # здесь находится класс Dir
Я хочу использовать классы из user.py и dir.py в main.py.
Как мне импортировать эти классы Python в main.py?
Кроме того, как мне импортировать класс User
, если user.py находится в подкаталоге?
bin/
dir.py
main.py
usr/
user.py
5 ответ(ов)
Для Python 2:
Создайте пустой файл с именем __init__.py
в той же директории, что и ваши файлы. Это сигнализирует Python о том, что "можно импортировать из этой директории".
После этого просто используйте следующие строки:
from user import User
from dir import Dir
То же самое относится и к случаям, когда файлы находятся в поддиректории. В этом случае также нужно поместить __init__.py
в поддиректорию, а затем использовать обычные импорты с точечной нотацией. Для каждого уровня директории вам нужно добавить в путь импорта.
Пример структуры директорий:
bin/
main.py
classes/
user.py
dir.py
Если директория называется "classes", то ваш импорт будет выглядеть так:
from classes.user import User
from classes.dir import Dir
Для Python 3:
Все так же, как и в предыдущем примере, но при импорте не из поддиректории необходимо префиксировать имя модуля точкой:
from .user import User
from .dir import Dir
В вашем файле main.py
используйте следующий код для импорта класса:
from user import Class
где Class
— это название класса, который вы хотите импортировать.
Если вы хотите вызвать метод класса Class
, вы можете сделать это следующим образом:
Class.method()
Обратите внимание, что в той же директории должен быть пустой файл __init__.py
.
Если в файлах user.py и dir.py нет классов, то строка
from .user import User
from .dir import Dir
не будет работать. В этом случае следует использовать импорт в следующем виде:
from . import user
from . import dir
Таким образом, вы сможете импортировать модули без необходимости загружать конкретные классы, что позволяет избежать ошибок, связанных с отсутствием классов в данных модулях.
Вы можете импортировать модуль и получить доступ к его функциям и классам через его имя, если не хотите смешивать их с вашими:
import util # импортируем util.py
util.clean()
util.setup(4)
Или вы можете импортировать функции и классы непосредственно в ваш код:
from util import clean, setup
clean()
setup(4)
Также можно использовать символ *
, чтобы импортировать все из этого модуля в ваш код:
from util import *
clean()
setup(4)
Для Python 3+ предположим, что у вас есть такая структура каталогов:
A/
__init__.py
bar.py
foo.py
В вашем файле __init__.py
вы можете использовать конструкцию from . import foo
. Это позволит вам импортировать модуль foo
в файле bar.py
.
Пример кода в A/bar.py
:
from .foo import YourClass
Обратите внимание на то, что важно использовать точку перед именем модуля foo
, чтобы указать, что он находится в том же пакете.
Назначение файлов __init__.py
— это включение необязательного кода инициализации, который выполняется при обращении к различным уровням пакета. Всё, что вы помещаете в __init__.py
, будет инициализировано во время загрузки пакета.
Импорт файлов из другой папки
Как импортировать другие файлы Python?
Импорт модуля по относительному пути
Использовать 'import module' или 'from module import'?
Подключение файла из подпапки?