Использование локальных заглушек Mypy

Я пытаюсь ввести подсказку, введенную Python 3.5, и получил проблему, используя локальные заглушки в качестве подсказки ввода с mypy.

эксперимента я сделать, это создать kk.py содержащей

def type_check(a):
    pass

кроме того, я поставил kk.pyi, содержащий

def type_check(a: int):...

в том же каталоге. Таким образом, я попытался вызвать ошибку "ncompatible types in assignment", передав строку type_check в kk.py - ... Однако, когда я побежал mypy kk.py и получить нет ошибка.

таким образом, я попробовал другой способ, который предлагает mypy doc, который должен установить переменную среды MYPYPATH в ~/some/path/stub и поставить kk.Нейпьидо в каталоге. Однако я получил ту же ошибку.

кто-нибудь может мне помочь в этом?

вот Вики mypy на как для использования локального заглушки.

1 ответов


Я не знаю, почему кто-то проголосовал против этого вопроса, не ответив на него или не комментируя, почему ему это не понравилось, но вот ответ, который я понял:

файл заглушки mypy работает только при импорте модуля. Таким образом, если у вас есть

def try_check(a):
    pass

in kk.py и

def try_check(a: int):...

в КК.pyi в том же каталоге с kk.py или в каталоге, который указывает MYPYPATH, mypy будет вводить проверку файла python при импорте kk. Это, если у вас есть

import .kk
kk.try_check('str')

in test.py и беги!--14-->mypy test.py, mypy сообщит о конфликте типов. Однако он не сообщит о конфликте, если у вас есть

try_check('str')

in kk.py.

вы можете ввести функции проверки в программе, которая содержит определение функции, Если вы пишете подсказку ввода явно в определении функции. Например, вы можете написать

def try_check(a: int):
    pass

try_check('str')

in kk.py и тогда mypy kk.py. Mypy сообщит конфликт типов.