Сложности с реализацией метода для выбора жанра фильма
Есть 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 не совсем поможет т.к. не очень большое количество жанров встречается во всех категориях фильмов.