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