Pouvez-vous définir l'indice de type pour une variable définie avec la with
syntaxe?
with example() as x:
print(x)
Je voudrais taper l'indice ci-dessus pour dire que x
c'est un str
(à titre d'exemple).
Le seul problème que j'ai trouvé est d'utiliser une variable intermédiaire, mais cela semble hacky.
with example() as x:
y: str = x
print(y)
Je ne trouve pas d'exemple dans la documentation de frappe .
python
python-3.x
type-hinting
Reactgular
la source
la source
x
comme type de retourexample().__enter__()
?x
alors que c'est simplement le type de retour deexample.__enter__
? Idéalement, vous avez annoté cette méthode / fonction.x
n'est pas la valeur de retour deexample
; c'est la valeur de retour deexample().__enter__()
.example
. L'annotationexample.__enter__
signifie une annotation alors qu'avec votre approche, vous devrez annoter dans tous les endroits où ce gestionnaire de contexte est utilisé, plus en général comment un utilisateur est-il censé savoir quel est le type de retour d'une API s'il n'est pas fourni?Réponses:
PEP 526, qui a été implémenté en Python 3.6, vous permet d'annoter des variables. Vous pouvez utiliser, par exemple,
ou
la source
for
. Excellente réponse, merci.__enter__
méthode retournera, la saisiex
ne sert à rien.mypy
sera heureux de permettre à une valeur de n'importe quel type d'être liéex
.x
questr
dans les deux cas, maismypy
ne le fait pas.Les annotations de type sont généralement placées aux limites de l'API. Dans ce cas, le type doit être déduit de
example.__enter__
. Dans le cas où cette fonction ne déclare aucun type, la solution consiste à créer un fichier de raccord correspondant afin d'aider le vérificateur de type à déduire ce type.Plus précisément, cela signifie créer un
.pyi
fichier avec la même racine que le module à partir duquel aExample
été importé. Ensuite, le code suivant peut être ajouté:la source