Сложности с реализацией метода для выбора жанра фильма

Есть 4 класса которые отражают 4 категории фильмов:

class Films(BaseCategory):
    name = "films"

class Cartoons(BaseCategory):
    name = "cartoons"


class Series(BaseCategory):
    name = "series"


class Animation(BaseCategory):
    name = "animation"

Они наследуются от базового класса:

class BaseCategory:
    name = None
    def __init__(self):
        self._params = None
        self._filter_pattern = None

    def category(self, genre):
        self._params = genre
        return self
        
    def filter(self, pattern:Filters):
        self._filter_pattern = f"?filter={pattern}"
        return self

    def __str__(self):
        separator = "/"
        return f"{self.name}/" + separator.join([i for i in self.__dict__.values() if i is not None])

У каждой из этих 4 категорий фильмов должен быть свой набор жанров(Фэнтези, Комедии, Боевики и тд). Проблема в том, что у каждой категории набор этих жанров разный, а поскольку я пишу пакет мне необходимо чтобы пользователю было удобно передавать жанр как параметр в методе класса category, в идеале мне необходимо чтобы IDE само подсказывало что необходимо передавать в качестве параметра. Подобная проблема была с фильтрами, но там всё решилось созданием одного небольшого класса Filters:

class Filters:
    LAST = "last"  # Последние поступления
    POPULAR = "popular"  # Популярные
    SOON = "soon"  # В ожидании
    WATCHING = "watching"  # Сейчас смотрят

Это сработало бы и для жанров, однако как я сказал они для каждой категории разные, а значит придётся создавать аж 4 класса подобных друг другу, что как по мне выглядит не очень красиво, да и импортировать при работе для каждой категории фильмов свой класс тоже не очень оптимально. В итоге я стою перед выбором создать несколько частично похожих классов и используя аннотацию типов указывать какой из классов я жду для получения, либо же просто создать в каждом классе категорий фильмов список с возможными аргументами и не заморачиваться с удобством использования. Каждый из этих вариантов мне кажется неудобным и не совсем корректным, поэтому я захотел узнать, как бы такую задачу решали люди, имеющие больше опыта.

P.S. Создание 5 класса с жанрами от которого отнаследуются остальные 4 не совсем поможет т.к. не очень большое количество жанров встречается во всех категориях фильмов.


Ответы (0 шт):