Pythonのファイルまたはファイルのようなオブジェクトに使用する正しい型のヒントはありますか?たとえば、この関数の戻り値をどのように入力するのでしょうか。
def foo():
return open('bar')
回答:
テキストモードまたはバイナリモードで開かれたファイルには、それぞれtyping.TextIOまたはtyping.BinaryIOタイプを使用します。
ドキュメントから:
クラス
typing.IOI / Oストリームタイプのラッパー名前空間。
これは、ジェネリック型
IO[AnyStr]とエイリアスTextIO、およびBinaryIOそれぞれIO[str]とを定義しますIO[bytes]。これらは、によって返されるなどのI / Oストリームのタイプを表しopen()ます。
def f() -> IO: return open('test')にはうまくいかないようです:PyCharmで「期待されるタイプ 'IO'、代わりに 'TextIOWrapper [str]'を取得しました」。
IO[str]ですか?
簡単な答え:
from typing import TextIOだけではありませんfrom 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