Você pode definir a dica de tipo para uma variável definida com a with
sintaxe?
with example() as x:
print(x)
Gostaria de digitar dica acima para dizer que x
é um str
(como exemplo).
A única solução alternativa que eu encontrei é usar uma variável intermediária, mas isso parece hacky.
with example() as x:
y: str = x
print(y)
Não consigo encontrar um exemplo na documentação de digitação .
python
python-3.x
type-hinting
Reactgular
fonte
fonte
x
como o tipo de retornoexample().__enter__()
?x
quando é simplesmente o tipo de retornoexample.__enter__
? Idealmente, você anotou esse método / função.x
não é o valor de retorno deexample
; é o valor de retorno deexample().__enter__()
.example
. Anotarexample.__enter__
significa uma anotação enquanto você usa sua abordagem em todos os lugares em que esse gerenciador de contexto é usado, além de, em geral, como um usuário deve saber qual é o tipo de retorno de uma API se ela não for fornecida?Respostas:
O PEP 526, que foi implementado no Python 3.6, permite anotar variáveis. Você pode usar, por exemplo,
ou
fonte
for
. Ótima resposta, obrigado.__enter__
método retornará, a digitaçãox
não serve para nada.mypy
felizmente permitirá que um valor de qualquer tipo seja vinculadox
.x
comostr
nos dois casos, masmypy
não.Geralmente, as anotações de tipo são colocadas nos limites da API. Nesse caso, o tipo deve ser deduzido de
example.__enter__
. Caso essa função não declare nenhum tipo, a solução é criar um arquivo stub correspondente para ajudar o verificador de tipos a inferir esse tipo.Especificamente, isso significa criar um
.pyi
arquivo com a mesma raiz do módulo a partir do qualExample
foi importado. Em seguida, o seguinte código pode ser adicionado:fonte