Як @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