Использование файла-заглушки Mypy не работает так же, как написание подсказки типа в определении функции.

Я пытаюсь написать подсказку типа явно в определении функции

# test.py
def annotated(x: int, y: str) -> bool:
    return x < y

запустил python3.5 -m mypy test.py и получил следующее сообщение

test.py:2: error: Unsupported operand types for > ("str" and "int")

Это правильно. Но когда я пытаюсь использовать файл-заглушку

# test.py
def annotated(x, y):
    return x < y

# test.pyi
def annotated(x: int, y: str) -> bool: ...

Я ничего не получил. Я видел этот ответ Использование локальных заглушек Mypy. Поэтому я пытаюсь import.

from test import annotated

annotated(2, 3)

Ничего страшного. я получил

error: Argument 2 to "annotated" has incompatible type "int"; expected "str"

Но вызов annotated(2, 's') по-прежнему ничего не дал.
Итак, что мне делать, чтобы проверить недопустимую операцию с файлом-заглушкой? Спасибо


person Hanaasagi    schedule 29.05.2017    source источник
comment
Вы можете попробовать задать этот вопрос каналу mypy gitter — я подозреваю, что такое поведение может быть преднамеренным, но не помните наверняка, и, вероятно, будет быстрее просто спросить основных разработчиков напрямую.   -  person Michael0x2a    schedule 31.05.2017
comment
Насколько я понимаю, файлы-заглушки предоставляют только тип API модуля для других модулей, которые его используют. Другими словами, тела реализаций функций не проверяются на наличие файлов-заглушек. Если вы хотите изменить это, вы можете открыть задачу в трекере mypy: github.com/python/mypy. /вопросы   -  person ivanl    schedule 04.06.2017
comment
Нашел причину и решение здесь: github.com/python/mypy/issues/5520 #issuecomment-426371485   -  person Pragy Agarwal    schedule 11.10.2018