Типизация Python не применяется

Я тестирую функции набора текста ^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

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


person Kape    schedule 29.10.2019    source источник


Ответы (1)


Аннотации типов сами по себе ничего не делают для обеспечения типов, они подготавливают ваш код для оценки средством проверки типов, таким как 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.
person Oso    schedule 29.10.2019
comment
Большое спасибо, это отвечает на все мои вопросы, я просто не понимаю, почему команда Python разработала его таким образом. - person Kape; 29.10.2019
comment
URL не работает - person Dima Lituiev; 09.07.2021