Почему распаковка с использованием нового общего синтаксиса в Python 3.13 вызывает ошибку mypy?Python

Программы на Python
Ответить
Anonymous
 Почему распаковка с использованием нового общего синтаксиса в Python 3.13 вызывает ошибку mypy?

Сообщение Anonymous »

Я пытаюсь использовать новый синтаксис универсального типа, представленный в Python 3.13, для определения псевдонимов типов с помощью распаковки (*). Хотя код выполняется правильно, mypy выдает ошибку проверки типа. Тот же код отлично работает при использовании старого универсального синтаксиса.
Вот мой код, использующий старый универсальный синтаксис, который работает как во время выполнения, так и с mypy:

Код: Выделить всё

from collections.abc import Callable
from typing import TypeAliasType, Unpack

RK_function_args = TypeAliasType("RK_function_args", tuple[float, int])

# Original function type
RK_function = TypeAliasType("RK_function", Callable[[Unpack[RK_function_args]], int])

# Attempted new function type with an additional int argument
RK_functionBIS = TypeAliasType(
"RK_functionBIS", Callable[[Unpack[RK_function_args], int], int]
)

def ff(a: float, b: int, c: int) -> int:
return 2

bis: RK_functionBIS = ff
res: int = bis(1.0, 2, 3)  # OK
print(res)
Однако, когда я переписываю это, используя новый общий синтаксис Python 3.13, mypy выдает ошибку:

Код: Выделить всё

from collections.abc import Callable
from typing import Unpack

type RK_function_args = tuple[float, int]
type RK_function = Callable[[Unpack[RK_function_args]], int]
type RK_functionBIS = Callable[[*RK_function_args, int], int]

def f(a: float, b: int) -> int:
return 2

def ff(a: float, b: int, c: int) -> int:
return 2

bis: RK_functionBIS = ff
res: int = bis(1.0, 2, 3)  # OK
print(res)
main.py:17: ошибка: несовместимые типы в присваивании (выражение имеет
тип «Callable[[float, int, int], int] ]", переменная имеет тип
"Callable[[VarArg(*tuple[*tuple[float, int], int])], int]")
[assignment]


Подробнее здесь: https://stackoverflow.com/questions/792 ... mypy-error
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»