¿Puedes definir la sugerencia de tipo para una variable definida con la with
sintaxis?
with example() as x:
print(x)
Me gustaría escribir una pista de lo anterior para decir que x
es un str
(como ejemplo).
La única solución que he encontrado es usar una variable intermedia, pero esto se siente extraño.
with example() as x:
y: str = x
print(y)
No puedo encontrar un ejemplo en la documentación de escritura .
python
python-3.x
type-hinting
Reactgular
fuente
fuente
x
como el tipo de retorno deexample().__enter__()
?x
cuando es simplemente el tipo de retorno deexample.__enter__
? Idealmente, ha anotado ese método / función.x
no es el valor de retorno deexample
; Es el valor de retorno deexample().__enter__()
.example
. Anotarexample.__enter__
significa una anotación, mientras que con su enfoque tendría que anotar en todos los lugares donde se usa ese administrador de contexto, además, en general, ¿cómo se supone que un usuario sabe cuál es el tipo de retorno de una API de todos modos si no se proporciona?Respuestas:
PEP 526, que se ha implementado en Python 3.6, le permite anotar variables. Puedes usar, por ejemplo,
o
fuente
for
. Gran respuesta, gracias.__enter__
devolverá el método, escribirx
no sirve para nada.mypy
felizmente permitirá vincular un valor de cualquier tipox
.x
comostr
en ambos casos, peromypy
no lo hace.Por lo general, las anotaciones de tipo se colocan en los límites de API. En este caso, el tipo debe inferirse de
example.__enter__
. En caso de que la función no declare ningún tipo, la solución es crear un archivo apéndice correspondiente para ayudar al verificador de tipos a inferir ese tipo.Específicamente, esto significa crear un
.pyi
archivo con la misma raíz que el módulo desde el queExample
se importó. Luego se puede agregar el siguiente código:fuente