มีคำใบ้ประเภทที่ถูกต้องสำหรับใช้กับไฟล์หรือวัตถุคล้ายไฟล์ใน Python หรือไม่ ตัวอย่างเช่นฉันจะพิมพ์คำใบ้ค่าส่งคืนของฟังก์ชันนี้ได้อย่างไร
def foo():
return open('bar')
มีคำใบ้ประเภทที่ถูกต้องสำหรับใช้กับไฟล์หรือวัตถุคล้ายไฟล์ใน Python หรือไม่ ตัวอย่างเช่นฉันจะพิมพ์คำใบ้ค่าส่งคืนของฟังก์ชันนี้ได้อย่างไร
def foo():
return open('bar')
คำตอบ:
ใช้อย่างใดอย่างหนึ่งtyping.TextIOหรือtyping.BinaryIOประเภทสำหรับไฟล์ที่เปิดในโหมดข้อความหรือโหมดไบนารีตามลำดับ
จากเอกสาร :
ชั้นเรียน
typing.IOWrapper namespace สำหรับประเภทสตรีม I / O
นี้กำหนดประเภททั่วไป
IO[AnyStr]และชื่อแทนTextIOและBinaryIOสำหรับตามลำดับและIO[str]IO[bytes]เหล่านี้เป็นตัวแทนของประเภทของ I / Oopen()ลำธารเช่นส่งกลับโดย
def f() -> IO: return open('test')ให้ "ประเภทที่คาดหวัง" IO "รับ" TextIOWrapper [str] "แทน" ใน PyCharm
IO[str]ไง?
คำตอบสั้น ๆ :
from typing import TextIOfrom typing import *IOเพื่อหมายถึงไฟล์โดยไม่ต้องระบุชนิดTextIOหรือBinaryIOถ้าคุณรู้จักประเภทตัวอย่างเช่น:
from typing import BinaryIO
def binf(inf: BinaryIO):
pass
with open('x') as f:
binf(f)
ให้ข้อผิดพลาดในการตรวจสอบ (ใน PyCharm) ของ Expected type 'BinaryIO', got 'TextIO' instead