Pythonのファイルまたはファイルのようなオブジェクトに使用する正しい型のヒントはありますか?たとえば、この関数の戻り値をどのように入力するのでしょうか。
def foo():
return open('bar')
回答:
テキストモードまたはバイナリモードで開かれたファイルには、それぞれtyping.TextIO
またはtyping.BinaryIO
タイプを使用します。
ドキュメントから:
クラス
typing.IO
I / 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