a: FirstSetting
b: SecondSetting
class GeneralSettings:
def __init__(self):
self.settings = Settings(a=FirstSetting(), b=SecondSetting())
def __getitem__(self, item: str) -> BaseSetting:
return self.settings[item]
у меня есть подобный код, который позволяет выбирать конкретные настройки для игры. Со стороны бизнес логики используется только класс GeneralSettings, FirstSetting и остальные никак не затрагиваются. сами настройки выбираются по конкретному литералу строки. в данном случае это "а" и "b", которые передаются в __getitem__. но у меня сложилось предчувствие, что в этом случае я использую словарь как то не по назначению и тут можно обойтись чем то другим, так ли это?. плюсом, при использовании этого способа, в __getitem__ нет тайпхинта на конкретный класс, только на базовый (хотя это вполне можно решить через overload и Literal)
Я не понял зачем ту вообще все эти классы
У тебя калсс First setting и second разные же, нет смысла брать их по ключам
разные в смысле? они ж от одного BaseSetting наследуются. со стороны логики приложения это настройки игры, просто разных типов. условно указать количество игроков это один тип настройки, а указать длительность игры это уже другой тип. но сами по себе для пользователя они имеют один интерфейс при настройке
Наследуются конечно да, но у них там внутри свои параметры
Ты собираешься юзать где-то количество игроков вместо длительности?
BaseSetting это абстрактный класс/протокол. у него есть абстрактные методы, которые и дергаются в бизнес логике. но сейчас появилась потребность в получении данных от конкретного типа настройки, то же количество игроков, как в примере. изначальная идея создать родительский класс была в том, чтобы не было дублирования кода, потому что иначе пришлось бы на каждый тип настройки плодить свой хендлер (тг бот)
Обсуждают сегодня