Сообщить об ошибке.

Тип аннотации Callable() модуля typing в Python

Типизация функций обратного вызова

Может использоваться как тип в аннотациях с помощью синтаксиса [].

Синтаксис:

# с версии Python 3.9. импорт из typing устарел
from typing import Callable
# используйте импорт из `collections.abc`
from collections.abc import Callable

Callable[[x], Y]

Параметры:

  • x - список аргументов функции,
  • Y - тип возвращаемого значения.

Описание:

Тип аннотации Callable модуля typing применяется для типизации функций обратного вызова, для объектов, которые их ожидают.

Запись Callable[[int], str] является функцией от (int) -> str. Синтаксис аннотации всегда должен использоваться ровно с двумя значениями: список аргументов и тип возвращаемого значения. Список аргументов должен быть списком типов или многоточием, возвращаемый тип должен быть одного типа.

Не существует синтаксиса для указания необязательных аргументов или ключевых аргументов. Такие типы функций редко используются как типы обратного вызова.

Форма записи как Callable[..., ReturnType] (буквальное многоточие) может использоваться в качестве подсказки для вызываемого объекта, принимающего любое количество аргументов и возвращающего ReturnType. Обычный Callable эквивалентен Callable[..., Any], а такая запись, свою очередь, эквивалентна встроенному абстрактному классу collections.abc.Callable.

Вызываемые объекты, которые принимают другие вызываемые объекты в качестве аргументов, могут указывать на то, что их типы параметров зависят друг от друга с помощью typing.ParamSpec. Кроме того, если этот вызываемый объект добавляет или удаляет аргументы из других вызываемых объектов, может использоваться оператор typing.Concatenate. Они принимают форму Callable[ParamSpecVariable, ReturnType] и Callable[Concatenate [Arg1Type, Arg2Type, ..., ParamSpecVariable], ReturnType] соответственно.

Не рекомендуется к применению с Python 3.9: встроенный абстрактный базовый класс collections.abc.Callable теперь поддерживает синтаксис [].

Дополнительно смотрите встроенный в Python "Тип псевдоним".

Изменено в версии 3.10: Callable теперь поддерживает typing.ParamSpec и typing.Concatenate.

Пример типизации функций обратного вызова.

from collections.abc import Callable

def feeder(get_next_item: Callable[[], str]) -> None:
    # тело функции

def async_query(on_success: Callable[[int], None],
                on_error: Callable[[int, Exception], None]) -> None:
    # тело функции