好的,我唯一想到的解决方案是使函数的arity显式,即。
from typing import Any, Callable, TypeVar
A = TypeVar('A')
B = TypeVar('B')
C = TypeVar('C')
def say_hi_and_call_ternary(func: Callable[[A, B, C], Any], a: A, b: B, c: C):
print('Hi.')
func(a, b, c)
def foo(a: str, b: float, c: int):
print(a, b, c + 1)
say_hi_and_call_ternary(foo, 'ok', 2.2, 'bad')
当然需要一个类似的
say_hi_and_call_unary
和
say_hi_and_call_binary
等等。
但由于我重视我的应用程序,而不是在prod中爆炸,而不是保存一些loc,我很高兴
mypy
能够报告错误,现在肯定是这样:
error: Argument 1 to "say_hi_and_call_ternary" has incompatible type "Callable[[str, float, int], Any]"; expected "Callable[[str, float, str], Any]"