Python типизация не становится обязательным - PullRequest
0 голосов
/ 29 октября 2019

Я тестирую возможности набора текста в ^ Python3.6, однако, похоже, что он ничего не делает, я могу сделать это без ошибки:

my_var: int = 0
my_var = 'str'
# no error

def ret_var(my_var: int) -> int:
    return my_var
ret_var(my_var)
# also no error

как я могу получить это исключениеили хотя бы предупреждение?

1 Ответ

2 голосов
/ 29 октября 2019

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

Если по какой-то причине вы хотите начать применять типы без использования средства проверки типов, вы можете украсить свои функции. У меня есть один такой декоратор, доступный на github , который поддерживает Union[], Optional[] и Any в дополнение к стандартным аннотациям:

Использование:

from type_enforcer import enforce_types


@enforce_types
def foo(x: int, y: float) -> int:
    return int(x * y)
>>> try:
>>>     foo(5, 2.0)
>>> except TypeError as e:
>>>     print(str(e))
10

>>> try:
>>>     foo(5, 2)
>>> except TypeError as e:
>>>     print(str(e))
Argument y supplied wrong type: expected float, got int.
...