Добавление набора текста в функцию с использованием TypeVar с ограниченными типами - PullRequest
1 голос
/ 13 февраля 2020

Из документации , TypeVar служат параметрами для обобщенных c типов, а также для generi c функций определений. Это также позволяет нам ограничивать возможные типы для нашего универсального c типа или функции.

Если я запусту приведенный ниже код с mypy, он будет правильно идентифицировать y как int и z как float.

from typing import TypeVar, Any

Array = TypeVar("Array")

X = TypeVar("X", int, float, str, complex)


def identity(x: X) -> X:
    return x


if __name__ == '__main__':
    y = identity(5)
    z = identity(5.5)
    reveal_type(y)
    reveal_type(z)

Однако, если я изменю определение X на X = TypeVar("X", int, float, str, complex, Any), тогда обнаруженный тип y и z, который я получаю от mypy, просто Any.

Мой вопрос: это ошибка или я неправильно использую TypeVar? Как мне тогда набрать эту функцию, если TypeVar - неправильный путь к go здесь?

Самое смешное, что если вместо этого я определю X как X = TypeVar("X", Any, int, float, str, complex), тогда я получу правильные выявленные типы для y и z, как и раньше, но документация о TypeVar ничего не говорит о заказе, и это может быть просто деталью реализации, и от нее зависит agile. Если поставить Any после int, float,, типы y и z будут обозначены как complex, что неверно.


Примечание. Что я действительно хочу добавить к ограниченным типам это массив numpy, но так как он не имеет информации о типизации, mypy интерпретирует его как просто Any, и он имеет тот же эффект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...