Come ha notato @jonrsharpe in un commento, questo può essere fatto con typing.Callable:
from typing import AnyStr, Callable
def my_function(name: AnyStr, func: Callable) -> None:
Il problema è Callableche da solo è tradotto in Callable[..., Any]che significa:
Un callable accetta un numero qualsiasi di argomenti / tipo e restituisce un valore di qualsiasi tipo. Nella maggior parte dei casi, questo non è ciò che desideri poiché consentirai il passaggio di praticamente qualsiasi funzione. Si desidera che vengano suggeriti anche i parametri della funzione e i tipi restituiti.
Ecco perché molti typesdi typingessere stato sovraccaricato di supporto sub-scripting che denota questi tipi di extra. Quindi, se, ad esempio, hai una funzione sumche richiede due se intrestituisce un int:
def sum(a: int, b: int) -> int: return a+b
La tua annotazione per esso sarebbe:
Callable[[int, int], int]
vale a dire, i parametri sono sotto script nella sottoscrizione esterna con il tipo restituito come secondo elemento nella sottoscrizione esterna. In generale:
Callable[[ParamType1, ParamType2, .., ParamTypeN], ReturnType]
Callable