Như @jonrsharpe đã lưu ý trong một nhận xét, điều này có thể được thực hiện với typing.Callable:
from typing import AnyStr, Callable
def my_function(name: AnyStr, func: Callable) -> None:
Vấn đề là, Callablebản thân nó được dịch sang Callable[..., Any]có nghĩa là:
Một có thể gọi nhận bất kỳ số / loại đối số nào và trả về một giá trị thuộc bất kỳ loại nào. Trong hầu hết các trường hợp, đây không phải là điều bạn muốn vì bạn sẽ cho phép chuyển khá nhiều chức năng. Bạn cũng muốn các tham số hàm và kiểu trả về cũng được gợi ý.
Đó là lý do tại sao nhiều typestrong typingđã bị quá tải để hỗ trợ tập lệnh phụ biểu thị các loại bổ sung này. Vì vậy, ví dụ, nếu bạn có một hàm sumnhận hai ints và trả về int:
def sum(a: int, b: int) -> int: return a+b
Chú thích của bạn cho nó sẽ là:
Callable[[int, int], int]
nghĩa là, các tham số được viết theo tập lệnh con trong gói đăng ký bên ngoài với kiểu trả về là phần tử thứ hai trong gói đăng ký bên ngoài. Nói chung:
Callable[[ParamType1, ParamType2, .., ParamTypeN], ReturnType]
Callable