Czy potrafisz zdefiniować wskazówkę dotyczącą typu dla zmiennej zdefiniowanej with
składnią?
with example() as x:
print(x)
Chciałbym wpisać podpowiedź powyżej, aby powiedzieć, że x
jest to str
(jako przykład).
Jedyne obejście, które znalazłem, to użycie zmiennej pośredniej, ale wydaje się to hacking.
with example() as x:
y: str = x
print(y)
Nie mogę znaleźć przykładu w dokumentacji do pisania .
python
python-3.x
type-hinting
Reactgular
źródło
źródło
x
jako typu zwracanegoexample().__enter__()
?x
gdy jest to po prostu typ zwracanyexample.__enter__
? Najlepiej, jeśli opisałeś tę metodę / funkcję.x
nie jest wartością zwracanąexample
; jest to wartość zwracana zexample().__enter__()
.example
. Adnotacjeexample.__enter__
oznaczają jedną adnotację, podczas gdy w swoim podejściu musiałbyś adnotować we wszystkich miejscach, w których używany jest ten menedżer kontekstu, a także ogólnie w jaki sposób użytkownik powinien wiedzieć, jaki jest typ zwracanego interfejsu API, jeśli nie jest on dostarczony?Odpowiedzi:
PEP 526, który został zaimplementowany w Pythonie 3.6, umożliwia dodawanie adnotacji do zmiennych. Możesz użyć na przykład
lub
źródło
for
. Świetna odpowiedź, dziękuję.__enter__
zwróci metoda, pisaniex
nie będzie miało żadnego celu.mypy
z radością zezwoli na związanie dowolnej wartościx
.x
jakstr
w obu przypadkach, alemypy
nie.Zazwyczaj adnotacje typu są umieszczane na granicach interfejsu API. W takim przypadku typ należy wywnioskować z
example.__enter__
. W przypadku, gdy ta funkcja nie deklaruje żadnych typów, rozwiązaniem jest utworzenie odpowiedniego pliku pośredniczącego , aby pomóc sprawdzającemu typowi wnioskować o tym typie.W szczególności oznacza to utworzenie
.pyi
pliku z tym samym rdzeniem, co moduł, z któregoExample
został zaimportowany. Następnie można dodać następujący kod:źródło