Я разрабатываю библиотеку python со следующей структурой
/application
/lib
__init__.py
/models
__init__.py
model1.py
model2.py
model3.py
В каждом файле модели .ppy есть соответствующий класс с именем Model%. Мне нравится держать эти классы в своих файлах, но это означает, что в моем приложении мне нужно импортировать классы из пакета моделей, например,
from models.model1 import Model1
from models.model2 import Model2
from models.model3 import Model3
Есть ли способ сделать это вместо этого?
from models import Model1, Model2, Model3
Он чувствует себя более интуитивно понятным и более похожим на то, что я делаю. У меня есть пакет под названием модели, и я хочу, чтобы он содержал эти классы, но я все же хочу, чтобы у каждого класса был свой собственный файл, поэтому я могу добавлять новые модели, просто добавляя файл.
Раньше я помещал это в файл my/application/lib/models/_init_py
from model1 import Model1
from model2 import Model2
from model3 import Model3
Но я понял, что это импорт всех классов, даже если мне нужен только один из них
Ваше окончательное решение верно. Вы должны только беспокоиться о загрузке слишком большого количества классов, если это вызывает серьезные проблемы с производительностью, и я очень сомневаюсь.
Создайте отдельный пакет для каждого модуля. Поместите model1.py
в пакет model1
. В __init__.py
файле пакета model1
поместите
from model1 import Model1
то вы сможете сделать
from model1 import Model1
из вашего приложения.
Один из способов - создать файл в каталоге моделей, который импортирует ваши классы, а затем импортировать из этого файла. Например, вы можете создать файл с именем api.py
, который содержит
from model1 import Model1
from model2 import Model2
from model3 import Model3
Затем вы можете импортировать модели, подобные этому
from models.api import Model1, Model2, Model3
__init__.py
__init__.py
пустым или выполнять только базовые действия по инициализации. Вы можете определить__all__
в__init__.py
и чем,from models import *