Como @jonrsharpe observou em um comentário, isso pode ser feito com typing.Callable
:
from typing import AnyStr, Callable
def my_function(name: AnyStr, func: Callable) -> None:
O problema é que, Callable
por si só, é traduzido para o Callable[..., Any]
que significa:
Um chamador pega qualquer número de / tipo de argumentos e retorna um valor de qualquer tipo. Na maioria dos casos, isso não é o que você deseja, pois permitirá que praticamente qualquer função seja aprovada. Você deseja que os parâmetros de função e tipos de retorno também sejam sugeridos.
É por isso que muitos types
de typing
ter sido sobrecarregado para suporte sub-scripting que denota estes tipos extras. Portanto, se, por exemplo, você tivesse uma função sum
que recebe dois se int
retorna um int
:
def sum(a: int, b: int) -> int: return a+b
Sua anotação seria:
Callable[[int, int], int]
ou seja, os parâmetros são subcriptografados na assinatura externa com o tipo de retorno como o segundo elemento na assinatura externa. Em geral:
Callable[[ParamType1, ParamType2, .., ParamTypeN], ReturnType]
Callable