Como @jonrsharpe señaló en un comentario, esto se puede hacer con typing.Callable
:
from typing import AnyStr, Callable
def my_function(name: AnyStr, func: Callable) -> None:
El problema es que, Callable
por sí solo, se traduce a lo Callable[..., Any]
que significa:
Un invocable toma cualquier número de argumentos / tipo y devuelve un valor de cualquier tipo. En la mayoría de los casos, esto no es lo que desea, ya que permitirá que se pase casi cualquier función. Desea que se insinúen también los parámetros de función y los tipos de retorno.
Es por eso que muchos types
de typing
haber sido sobrecargado para el apoyo sub-secuencias de comandos que denota estos tipos adicionales. Entonces, si, por ejemplo, tuvo una función sum
que toma dos int
sy devuelve un int
:
def sum(a: int, b: int) -> int: return a+b
Su anotación para ello sería:
Callable[[int, int], int]
es decir, los parámetros se subescriben en la suscripción externa con el tipo de retorno como el segundo elemento en la suscripción externa. En general:
Callable[[ParamType1, ParamType2, .., ParamTypeN], ReturnType]
Callable