Есть ли какой-либо правильный тип подсказки для использования в файле или файлоподобном объекте в Python? Например, как бы я набирал тип - возвращал значение этой функции?
def foo():
return open('bar')
Есть ли какой-либо правильный тип подсказки для использования в файле или файлоподобном объекте в Python? Например, как бы я набирал тип - возвращал значение этой функции?
def foo():
return open('bar')
Используйте типы typing.TextIO
или typing.BinaryIO
для файлов, открытых в текстовом режиме или в двоичном режиме соответственно.
От документы:
класс
typing.io
Пространство имен Wrapper для типов потоков ввода-вывода.
Это определяет общий тип
IO[AnyStr]
и псевдонимыTextIO
иBinaryIO
соответственноIO[str]
иIO[bytes]
. Они представляют типы потоков ввода-вывода, например, возвращаемыеopen()
.
Вы можете использовать TextIO и BinaryIO для текстовых и двоичных файлов соответственно.
Для тех, кто не очень знаком с типом намека на Python 3, ищем быстрый пример. Либо это:
from typing import TextIO # or IO or BinaryIO
def myfunction(file: TextIO ):
pass
или в качестве рекомендации по общей рекомендации по эффективной практике (хотя для этого конкретного случая это необязательно):
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from typing import TextIO # or IO or BinaryIO
def myfunction(file: 'TextIO'):
pass
Второй подход позволит избежать импорта класса во время выполнения. Хотя python все равно придется импортировать TYPE_CHECKING
во время выполнения, рекомендуется избегать импортирования классов только для намека типа: (1) не выполняется (просто разобран) и (2) он может избежать циклического импорта, Хотя в этом конкретном случае он ничего не добавляет, всегда лучше привыкнуть к нему и избегать будущих проблем.
Обратите внимание, что во втором утверждении цитаты вокруг имени класса 'TextIO'
требуются