How to import the class within the same directory or sub directory?
Как импортировать класс в тот же каталог или подкаталог?
У меня есть каталог, в котором хранятся все .py файлы.
bin/ main.py user.py # where class User resides dir.py # where class Dir resides
Я хочу использовать классы из user.py и dir.py в main.py.
Как я могу импортировать эти классы Python в main.py?
Кроме того, как я могу импортировать класс, User если user.py находится в подкаталоге?
bin/ dir.py main.py usr/ user.py
Переведено автоматически
Ответ 1
Python 2
Создайте пустой файл с именем __init__.py в том же каталоге, что и файлы. Это будет означать для Python, что "можно импортировать из этого каталога".
Тогда просто сделайте...
from user import User fromdirimport Dir
То же самое справедливо, если файлы находятся в подкаталоге - также поместите __init__.py в подкаталог, а затем используйте обычные инструкции импорта с обозначением точками. Для каждого уровня каталога вам нужно добавить путь к импорту.
bin/ main.py classes/ user.py dir.py
Итак, если бы каталог был назван "классы", то вы бы сделали это:
from classes.user import User from classes.dirimport Dir
Python 3
То же, что и в предыдущем, но перед именем модуля ставится префикс ., если не используется подкаталог:
from .user import User from .dirimport Dir
Ответ 2
Я только что узнал (благодаря комментарию мартино), что для импорта классов из файлов в том же каталоге теперь нужно писать на Python 3:
from .user import User from .dirimport Dir
Ответ 3
Начиная с python3.3 и выше, в __init__.py этом больше нет необходимости. Если текущий каталог консоли - это каталог, в котором находится скрипт python, все работает нормально с
import user
Однако это не сработает, если вызывается из другого каталога, который не содержит user.py.
В этом случае используйте
from . import user
Это работает, даже если вы хотите импортировать весь файл, а не только класс оттуда.
Ответ 4
В вашем main.py:
from user import Class
где Class - это имя класса, который вы хотите импортировать.
Если вы хотите вызвать метод Class , вы можете вызвать его с помощью:
Class.method
Обратите внимание, что в том же каталоге должен быть пустой __init__.py файл.