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 è Callable
che 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 types
di typing
essere stato sovraccaricato di supporto sub-scripting che denota questi tipi di extra. Quindi, se, ad esempio, hai una funzione sum
che richiede due se int
restituisce 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