PEP 484 によると、Ppythonの最新バージョンでは、関数アノテーションを使用して静的型分析を行うことができます。これは、タイピングモジュールによって簡単になります。
今、私は「ファイルストリーム」に向けて「タイプヒント」をどのように与えるのだろうかと思っています。
_def myfunction(file: FILETYPE):
pass
with open(fname) as file:
myfunction(file)
_
FILETYPE
として何を挿入しますか?
print(type(file))
を使用すると_<class '_io.TextIOWrapper'>
_が返されますが、これは明確ではありません。
一般的な「ファイル」タイプはありませんか?
_typing.IO
_、_typing.TextIO
_、および_typing.BinaryIO
_を使用して、さまざまなタイプのI/Oストリームを表すことができます。 documentation を引用するには:
クラスタイピング。io
I/Oストリームタイプのラッパー名前空間。
これは、ジェネリック型_
IO[AnyStr]
_およびエイリアスTextIO
とBinaryIO
を定義します。
それぞれ_IO[str]
_および_IO[bytes]
_。これらは、そのようなI/Oストリームのタイプを表しますopen()
によって返されます。これらの型には、_
typing.IO
_、_typing.TextIO
_、および
_typing.BinaryIO
_。
これのどちらか:
from typing import TextIO # or IO or BinaryIO
def myfunction(file: TextIO ):
pass
[〜#〜]または[〜#〜] this
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from typing import TextIO # or IO or BinaryIO
def myfunction(file: 'TextIO'):
pass
2番目の方法では、実行中にクラスをインポートしません。 pythonは実行中にTYPE_CHECKING
をインポートする必要がありますが、型ヒントのみのクラスをインポートしないことをお勧めします:(1)は実行されません(解析されるだけです) 、および(2)循環インポートを回避できます。