Я хочу узнать ее тип при наведении мышки на переменную, но это не получается. Кто-нибудь знает как это сделать? Например, при наведении на x пишет какое-то Literal, хотя тип переменной я прямо объявил как int.
Не работает. таким образом он определяет только тип float, но не может определить string или int
Я знаю, но вы сами можете понять, что было источником, если вы видите "..." значит это была строка, если вы видите целое число - это было int и т.д.






В подсказке Literal относится к typing.Literal, который представляет собой специальную форму, используемую для определения типа, представляющего собой набор всех заданных литеральных значений.
Легко увидеть, что Literal[1] — это подтип int, Literal['foo'] — подтип str и так далее.
В этом случае средство проверки типов (Pyright) может определить более конкретный тип для x, поэтому оно и сделало именно это. Это особенность, а не ошибка. В зависимости от потока этот тип может меняться:
x = 1235
reveal_type(x) # Literal[1235]
for _ in range(0):
x += 2
reveal_type(x) # int
reveal_type(x) # int
Следует также отметить, что это может быть, а может и не быть в случае с другими средствами проверки типов; то есть это зависит от реализации. Возьмем, к примеру, Mypy:
(playground links: Mypy , Pyright)
x1: int
x1 = 1235
reveal_type(x1) # pyright => Literal[1235]
# mypy => int
x2: int = 1235
reveal_type(x2) # pyright => Literal[1235]
# mypy => int
x3 = 1235
reveal_type(x3) # pyright => Literal[1235]
# mypy => int
x4 = 1233 + 2
reveal_type(x4) # pyright => Literal[1235]
# mypy => int
Насколько мне известно, в настоящее время нет настроек для контроля такого поведения.
В большинстве случаев будет указан тип (попробуйте
x=1235.0, и вы увидите float), здесь вы видите, что он хранится как литерал. Благодаря этому вы сможете отличить его исходный тип по тому, что содержится в скобках. Однако я рекомендую понимать литералы, потому что если бы вы, например, написалиx = [123], вы получили бы список целых чисел, а не список литералов geeksforgeeks.org/literals-in-python