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