на литералы?
Ну типа у меня есть датакласс
@datalass(frozen=True)
class FOO:
BAR: str = 'BAR'
ABC: str = 'ABC'
и я хочу в функцию передавать
def qwe(data: str):
print(data)
qwe(FOO.BAR)
Вот хочется чтобы вместо data: str - былая какая-то балалйка которая позволяет сказать что это один из аттрибутов датакласса.
Первое что приходит в голову это енум, но там есть подводные с тем что нужно будет брать не просто FOO.BAR, а FOO.BAR.value если я захочу передать именно значение, что-то сходу решение не придумывается
ты же понимаешь что сейчас у тебя можно сделать FOO(BAR="qwe", ABC="xxx")? И собственно для этого датаклассы сделаны
дак а что это меняет? ну можно, и чо? ему же инстанс никто не будет крафтить никогда, это просто способ организовать все возможные значения в одну структуру, по сути енам, но с фичами датакласса т.е. я же могу сделать вот так
это применение датакласса не по назначению. Датакласс нужен для того тчобы у него создавали инстансы хранящие данные
ты можешь сделать любую хуйню, но хз как ты потом собрался другим разработчикам объяснять зачем это. И уж тем более тут тайпхинты вообще побоку
конкретно тут у тебя согласно тайпхинтам BAR - это атрибут экземпляра FOO, хранщий произвольную строку
>>> class A(str, Enum): ... x = "x" ... def __repr__(self): return self ... >>> A.x x
also, эту же проблему решает init=False
вообще вроде как вполне нормальный способ их так юзать, все кому показывал такой подход воспринимали хорошо
Проблема в том, что датакласс нужен для зрения данных в экземплярах. А ты юзаешь его хз для чего
ну с тем что можно инитить со значениями своими, хотя не понимаю зачем
вообще почему бы и нет, выглядит разумно, спасибо
Обсуждают сегодня