Введите подсказку для файла или файлового объекта?
Есть ли какой-либо правильный тип подсказки для использования в файле или файлоподобном объекте в Python? Например, как бы я набирал тип - возвращал значение этой функции?
def foo():
return open('bar')
Ответы
Ответ 1
Используйте типы typing.TextIO
или typing.BinaryIO
для файлов, открытых в текстовом режиме или в двоичном режиме соответственно.
От документы:
класс typing.io
Пространство имен Wrapper для типов потоков ввода-вывода.
Это определяет общий тип IO[AnyStr]
и псевдонимы TextIO
и BinaryIO
соответственно IO[str]
и IO[bytes]
. Они представляют типы потоков ввода-вывода, например, возвращаемые open()
.
Ответ 2
Вы можете использовать TextIO и BinaryIO для текстовых и двоичных файлов соответственно.
Ответ 3
Для тех, кто не очень знаком с типом намека на 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'
требуются