Bisakah Anda menentukan jenis petunjuk untuk variabel yang ditentukan dengan with
sintaks?
with example() as x:
print(x)
Saya ingin mengetikkan petunjuk di atas untuk mengatakan bahwa itu x
adalah str
(sebagai contoh).
Satu-satunya cara yang saya temukan adalah menggunakan variabel perantara, tetapi ini terasa membingungkan.
with example() as x:
y: str = x
print(y)
Saya tidak dapat menemukan contoh dalam dokumentasi pengetikan .
python
python-3.x
type-hinting
Reactgular
sumber
sumber
x
sebagai tipe pengembalianexample().__enter__()
?x
padahal itu hanya tipe pengembalianexample.__enter__
? Idealnya Anda telah mencatat metode / fungsi tersebut.x
bukan nilai pengembalianexample
; itu adalah nilai balik dariexample().__enter__()
.example
. Anotasiexample.__enter__
berarti satu anotasi sementara dengan pendekatan Anda, Anda harus membuat anotasi di semua tempat di mana manajer konteks itu digunakan, plus secara umum bagaimana seorang pengguna seharusnya mengetahui apa tipe pengembalian API jika itu tidak disediakan?Jawaban:
PEP 526, yang telah diimplementasikan dalam Python 3.6, memungkinkan Anda untuk membubuhi keterangan variabel. Anda dapat menggunakan, misalnya,
atau
sumber
for
. Jawaban yang bagus, terima kasih.__enter__
metode yang akan kembali, mengetikx
tidak melayani tujuan apa pun.mypy
akan dengan senang hati mengizinkan nilai jenis apa pun terikatx
.x
sepertistr
dalam kedua kasus, tetapimypy
tidak.Biasanya anotasi jenis ditempatkan di batas API. Dalam hal ini tipe harus disimpulkan
example.__enter__
. Jika fungsi tersebut tidak mendeklarasikan tipe apa pun, solusinya adalah membuat file rintisan yang sesuai untuk membantu pemeriksa tipe menyimpulkan tipe itu.Khususnya ini berarti membuat
.pyi
file dengan batang yang sama dengan modul dari manaExample
diimpor. Kemudian kode berikut dapat ditambahkan:sumber