Як @jonrsharpe зазначив у коментарі, це можна зробити за допомогою typing.Callable:
from typing import AnyStr, Callable
def my_function(name: AnyStr, func: Callable) -> None:
Випуск полягає в тому, що Callableвін самостійно перекладається, Callable[..., Any]що означає:
Викликається приймає будь-яку кількість аргументів / тип та повертає значення будь-якого типу. У більшості випадків це не те, що ви хочете, оскільки ви дозволяєте майже будь-яку функцію передавати. Ви хочете, щоб параметри функцій та типи повернення також натякалися.
Ось чому багато хто typesз typingних перевантажений, щоб підтримувати суб-сценарії, що позначають ці додаткові типи. Так, якщо, наприклад, у вас була функція, sumяка займає два intс і повертає int:
def sum(a: int, b: int) -> int: return a+b
Ваша примітка до цього буде:
Callable[[int, int], int]
тобто параметри суб-сценарії у зовнішній підписці з типом повернення як другий елемент у зовнішній підписці. В загальному:
Callable[[ParamType1, ParamType2, .., ParamTypeN], ReturnType]
Callable