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à, Callable
bả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 types
trong 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 sum
nhận hai int
s 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