Использование staticmethod в Python это плохая практика?

Добрый день. Много раз слышал, что статика зло и вполне могу согласиться с этим в некоторых случаях.
Но существуют ситуации, когда в бизнес-логике возникает необходимость преобразования некоторых промежуточных данных (которые не относятся к состоянию сущности напрямую).

Например, я реализую репозиторий. А именно, метод get_user_by_id. Драйвер возвращает сущность БД обернутую в словарь. Далее, мне нужно засунуть этот словарь в модель этой сущности, на основе тех данных, что я получил.

Вполне логично, вынести логику обертывания данных в отдельный метод (да, в теории можно использовать и фабрику). Этот метод на вход принимает только словарь, а возвращает объект модели этой сущности. Ему не нужен контекст класса.

Очевидно, что этому методу не нужен self или cls, поскольку они не будут использоваться. И здесь даже статический анализатор будет выбрасывать предупреждение. Выхода два: статический метод или внешняя глобальная функция.

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

Обычно, такой диссонанс возникает, когда нужны какие-то сервисные методы, обрабатывающие промежуточное состояние, но которые нельзя вынести в отдельный миксин с набором хелперов, поскольку его логика специфична для одного конкретного класса.
  • Вопрос задан
  • 313 просмотров
Решения вопроса 1
iggor-markin
@iggor-markin
Python Developer
Вы не задаёте вопросов в этой заметке, поэтому просто прокомментирую. Зло — это когда программист делает какие-то вещи необдуманно. От балды. У вас же есть задача и вы решаете её доступным, понятным и удобным способом. Главная мысль уже описана вами же:
существуют ситуации, когда в бизнес-логике возникает необходимость
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
aryeh
@aryeh
Молод (душой) и приятен в общении :-)
в такой ситуации статический метод предпочтительнее глобальной функции. имхо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы