Как импортировать класс в пределах той же директории или поддиректории?
У меня есть каталог, в котором хранятся все файлы .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?
Относительные импорты в Python 3
Импорт модуля по относительному пути