Có gợi ý loại chính xác nào để sử dụng cho tệp hoặc đối tượng giống tệp trong Python không? Ví dụ, làm cách nào để gõ-gợi ý giá trị trả về của hàm này?
def foo():
return open('bar')
Có gợi ý loại chính xác nào để sử dụng cho tệp hoặc đối tượng giống tệp trong Python không? Ví dụ, làm cách nào để gõ-gợi ý giá trị trả về của hàm này?
def foo():
return open('bar')
Câu trả lời:
Sử dụng một trong hai typing.TextIO
hoặc typing.BinaryIO
các loại, cho các tập tin đã mở trong chế độ văn bản hoặc chế độ nhị phân tương ứng.
Từ các tài liệu :
lớp học
typing.IO
Không gian tên gói cho các loại luồng I / O.
Điều này xác định loại chung
IO[AnyStr]
và bí danhTextIO
vàBinaryIO
cho tương ứngIO[str]
vàIO[bytes]
. Chúng đại diện cho các loại luồng I / O chẳng hạn như được trả về bởiopen()
.
def f() -> IO: return open('test')
đưa ra "Loại mong đợi là 'IO', thay vào đó là 'TextIOWrapper [str]'" trong PyCharm.
IO[str]
sao?
Câu trả lời ngắn gọn:
from typing import TextIO
không chỉ là from typing import *
.IO
nghĩa là một tệp mà không chỉ định loạiTextIO
hoặc BinaryIO
nếu bạn biết loạiVí dụ:
from typing import BinaryIO
def binf(inf: BinaryIO):
pass
with open('x') as f:
binf(f)
đưa ra lỗi kiểm tra (trong PyCharm) Expected type 'BinaryIO', got 'TextIO' instead