на литералы?
                  
                  
                  Ну типа у меня есть датакласс
                  
                  
                  
                  
                  
                  @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
вообще вроде как вполне нормальный способ их так юзать, все кому показывал такой подход воспринимали хорошо
Проблема в том, что датакласс нужен для зрения данных в экземплярах. А ты юзаешь его хз для чего
ну с тем что можно инитить со значениями своими, хотя не понимаю зачем
вообще почему бы и нет, выглядит разумно, спасибо
Обсуждают сегодня