Рационализация структуры пакета в Python

1

Я разрабатываю библиотеку 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

Но я понял, что это импорт всех классов, даже если мне нужен только один из них

  • 1
    Это действительно вопрос выбора - многие люди говорят, что им нравится оставлять __init__.py пустым или выполнять только базовые действия по инициализации. Вы можете определить __all__ в __init__.py и чем, from models import *
Теги:
packaging

3 ответа

2

Ваше окончательное решение верно. Вы должны только беспокоиться о загрузке слишком большого количества классов, если это вызывает серьезные проблемы с производительностью, и я очень сомневаюсь.

1

Создайте отдельный пакет для каждого модуля. Поместите model1.py в пакет model1. В __init__.py файле пакета model1 поместите

from model1 import Model1

то вы сможете сделать

from model1 import Model1

из вашего приложения.

1

Один из способов - создать файл в каталоге моделей, который импортирует ваши классы, а затем импортировать из этого файла. Например, вы можете создать файл с именем api.py, который содержит

from model1 import Model1
from model2 import Model2
from model3 import Model3

Затем вы можете импортировать модели, подобные этому

from models.api import Model1, Model2, Model3
  • 1
    Вы можете сделать то же самое в __init__.py

Ещё вопросы

Сообщество Overcoder
Наверх
Меню