Wie @jonrsharpe in einem Kommentar feststellte, kann dies folgendermaßen geschehen typing.Callable
:
from typing import AnyStr, Callable
def my_function(name: AnyStr, func: Callable) -> None:
Das Problem ist, Callable
dass für sich genommen übersetzt wird, Callable[..., Any]
was bedeutet:
Ein Callable akzeptiert eine beliebige Anzahl von / type von Argumenten und gibt einen Wert von einem beliebigen Typ zurück. In den meisten Fällen ist dies nicht das, was Sie wollen, da Sie so gut wie jede Funktion übergeben können. Sie möchten, dass auch die Funktionsparameter und Rückgabetypen angedeutet werden.
Aus diesem Grund wurden viele types
in typing
überlastet, um Subskripte zu unterstützen, die diese zusätzlichen Typen kennzeichnen. Wenn Sie beispielsweise eine Funktion hatten sum
, die zwei int
Sekunden benötigt und Folgendes zurückgibt int
:
def sum(a: int, b: int) -> int: return a+b
Ihre Anmerkung dazu wäre:
Callable[[int, int], int]
Das heißt, die Parameter werden im äußeren Abonnement mit dem Rückgabetyp als zweitem Element im äußeren Abonnement subskriptiert. Allgemein:
Callable[[ParamType1, ParamType2, .., ParamTypeN], ReturnType]
Callable