Аннотация типа Python для функции, которая принимает тип и возвращает значение данного типа - PullRequest
1 голос
/ 24 апреля 2019

Я пытаюсь аннотировать функцию, которая анализирует строку для указанного типа, и я пытаюсь найти способ аннотировать возвращаемый тип, чтобы указать это.

def parse(s: str, t: type) -> t:
    return t(s)

Само собой разумеется, -> t: не работает.

Я надеялся использовать непатентованные значения, но не вижу способа преобразовать входную сигнатуру, чтобы она могла что-то сделать для вывода TypeVar. Лучше всего я исказил сигнатуру функции странным и запутанным способом, и это было бы недопустимо делать только для намека на тип.

from typing import TypeVar

T = TypeVar('T')


def parse(s: str, to: T) -> T:
    t = type(to)
    return t(s)

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

1 Ответ

0 голосов
/ 24 апреля 2019

Я решил, используя Тип , как предложил @jonrsharpe.

from typing import Type, TypeVar

T = TypeVar('T')


def parse(s: str, t: Type[T]) -> T:
    return t(s)


x = parse('123', int)
x = parse('546', int)  # OK
x = parse('324', float)  # mypy error: Incompatible types in assignment (expression has type "float", variable has type "int")
...