170 похожих чатов

Скажите, а есть какой-то адекватный способ в питоне сделайт тайпхинт

на литералы?
Ну типа у меня есть датакласс

@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 если я захочу передать именно значение, что-то сходу решение не придумывается

12 ответов

23 просмотра

ты же понимаешь что сейчас у тебя можно сделать FOO(BAR="qwe", ABC="xxx")? И собственно для этого датаклассы сделаны

Avonar- Автор вопроса
Tishka17
ты же понимаешь что сейчас у тебя можно сделать FO...

дак а что это меняет? ну можно, и чо? ему же инстанс никто не будет крафтить никогда, это просто способ организовать все возможные значения в одну структуру, по сути енам, но с фичами датакласса т.е. я же могу сделать вот так

Avonar
дак а что это меняет? ну можно, и чо? ему же инста...

это применение датакласса не по назначению. Датакласс нужен для того тчобы у него создавали инстансы хранящие данные

Avonar
дак а что это меняет? ну можно, и чо? ему же инста...

ты можешь сделать любую хуйню, но хз как ты потом собрался другим разработчикам объяснять зачем это. И уж тем более тут тайпхинты вообще побоку

Avonar
дак а что это меняет? ну можно, и чо? ему же инста...

конкретно тут у тебя согласно тайпхинтам BAR - это атрибут экземпляра FOO, хранщий произвольную строку

>>> class A(str, Enum): ... x = "x" ... def __repr__(self): return self ... >>> A.x x

Avonar- Автор вопроса
Avonar- Автор вопроса
Tishka17
это применение датакласса не по назначению. Датакл...

вообще вроде как вполне нормальный способ их так юзать, все кому показывал такой подход воспринимали хорошо

Avonar
also, эту же проблему решает init=False

Проблема в том, что датакласс нужен для зрения данных в экземплярах. А ты юзаешь его хз для чего

Avonar- Автор вопроса
Tishka17
Какую?

ну с тем что можно инитить со значениями своими, хотя не понимаю зачем

Avonar- Автор вопроса
Tishka17
>>> class A(str, Enum): ... x = "x" ... def ...

вообще почему бы и нет, выглядит разумно, спасибо

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта