Можете ли вы определить подсказку типа для переменной, определенной с помощью with
синтаксиса?
with example() as x:
print(x)
Я хотел бы напечатать подсказку выше, чтобы сказать, что x
это str
(в качестве примера).
Единственный обходной путь, который я нашел, - это использование промежуточной переменной, но это кажется хакерским.
with example() as x:
y: str = x
print(y)
Я не могу найти пример в печатной документации .
python
python-3.x
type-hinting
Reactgular
источник
источник
x
качестве возвращаемого типаexample().__enter__()
?x
когда это просто возвращаемый типexample.__enter__
? В идеале вы аннотировали этот метод / функцию.x
не возвращаемое значениеexample
; это возвращаемое значениеexample().__enter__()
.example
. Аннотированиеexample.__enter__
означает одну аннотацию, в то время как при вашем подходе вам придется аннотировать во всех местах, где используется этот диспетчер контекста, а также вообще, как пользователь должен знать, какой тип возвращаемого API в любом случае есть, если он не предоставляется?Ответы:
PEP 526, который был реализован в Python 3.6, позволяет аннотировать переменные. Вы можете использовать, например,
или
источник
for
. Отличный ответ, спасибо.__enter__
вернет метод, набор текстаx
не имеет смысла.mypy
с радостью позволят привязать значение любого типаx
.x
какstr
в обоих случаях, ноmypy
не делает.Обычно аннотации типов размещаются на границах API. В этом случае тип должен быть выведен из
example.__enter__
. Если эта функция не объявляет какие-либо типы, решение состоит в том, чтобы создать соответствующий файл-заглушку , чтобы средство проверки типов могло вывести этот тип.В частности, это означает создание
.pyi
файла с тем же основанием, что и модуль, из которогоExample
был импортирован. Затем можно добавить следующий код:источник