Подсказка типа Python 3.5 не приводит к ошибке

Одной из новых функций в Python 3.5 является подсказка типов, вдохновленная этот проект.

ввод: PEP 484 — подсказки по вводу.

Я хочу протестировать его, но он работает не так, как ожидалось.

import typing

class BankAccount:
    def __init__(self, initial_balance: int = 0) -> None:
        self.balance = initial_balance
    def deposit(self, amount: int) -> None:
        self.balance += amount
    def withdraw(self, amount: int) -> None:
        self.balance -= amount
    def overdrawn(self) -> bool:
        return str(self.balance < 0)

my_account = BankAccount(15)
my_account.withdraw(5)
print(type(my_account.overdrawn()))

результаты:

<class 'str'>

Я ожидал бы ошибку, потому что я ожидаю логическое значение в качестве возврата. Я тестировал его на python: 3.5 (докер) и локально. Я что-то пропустил, чтобы это сработало? Этот ввод не работает во время выполнения (например, python app.py)?


person svenhornberg    schedule 24.10.2015    source источник
comment
во время выполнения проверка типов не выполняется. Это прямо в первом разделе.   -  person Ignacio Vazquez-Abrams    schedule 24.10.2015


Ответы (2)


См. пятый абзац реферата в PEP, на который вы ссылаетесь:

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

person Daniel Roseman    schedule 24.10.2015

Чтобы получить static чеков, рассмотрите такой проект, как mypy, на котором основан PEP 484.

Проверка не будет выполняться во время выполнения явно объявлена ​​в PEP, чтобы уменьшить опасения по поводу некоторого перехода к статическому Python.


Как указал Даниэль, вы можете просмотреть атрибуты в атрибуте __annotations__ в форма:

{'return': bool}

для функции overdrawn().

Если вы хотите, вы можете создать свою собственную небольшую функцию проверки типов, чтобы выполнять небольшие проверки во время выполнения, используя этот файл dict. Поиграйте с этим. Кроме того, если вы готовы прочитать, взгляните на мой ответ о подсказках типов здесь.

person Dimitris Fasarakis Hilliard    schedule 24.10.2015