Использование staticmethod в Python это плохая практика?
Добрый день. Много раз слышал, что статика зло и вполне могу согласиться с этим в некоторых случаях.
Но существуют ситуации, когда в бизнес-логике возникает необходимость преобразования некоторых промежуточных данных (которые не относятся к состоянию сущности напрямую).
Например, я реализую репозиторий. А именно, метод get_user_by_id. Драйвер возвращает сущность БД обернутую в словарь. Далее, мне нужно засунуть этот словарь в модель этой сущности, на основе тех данных, что я получил.
Вполне логично, вынести логику обертывания данных в отдельный метод (да, в теории можно использовать и фабрику). Этот метод на вход принимает только словарь, а возвращает объект модели этой сущности. Ему не нужен контекст класса.
Очевидно, что этому методу не нужен self или cls, поскольку они не будут использоваться. И здесь даже статический анализатор будет выбрасывать предупреждение. Выхода два: статический метод или внешняя глобальная функция.
Но вынесение логики (предположим, что эта логика связана исключительно с конкретным классом репозитория) вне класса, как мне кажется, выглядит странно. Ведь эта логика семантически принадлежит только этому классу и странно их разделять.
Обычно, такой диссонанс возникает, когда нужны какие-то сервисные методы, обрабатывающие промежуточное состояние, но которые нельзя вынести в отдельный миксин с набором хелперов, поскольку его логика специфична для одного конкретного класса.
Вы не задаёте вопросов в этой заметке, поэтому просто прокомментирую. Зло — это когда программист делает какие-то вещи необдуманно. От балды. У вас же есть задача и вы решаете её доступным, понятным и удобным способом. Главная мысль уже описана вами же:
существуют ситуации, когда в бизнес-логике возникает необходимость