Пакеты Python – импорт по классам, а не по файлам
Вопрос
Скажем, у меня есть следующая файловая структура:
app/
app.py
controllers/
__init__.py
project.py
plugin.py
Если app/controllers/project.py определяет класс Project, app.py импортирует его следующим образом:
from app.controllers.project import Project
Я хотел бы просто иметь возможность сделать:
from app.controllers import Project
Как это будет сделано?
Решение
Вам нужно поставить
from project import Project
в controllers/__init__.py
.
Обратите внимание, что когда Абсолютный импорт станет значением по умолчанию (Python 2.7?), вам нужно будет добавить точку перед именем модуля (чтобы избежать коллизий с моделью верхнего уровня с именем project
), то есть,
from .project import Project
Не связан с StackOverflow