[英]How to type hint function with a callable argument and default value
我试图输入一个函数的参数,该函数需要一个可调用的,并且有一个默认参数(在下面的示例set
)
from typing import Callable, List
T = TypeVar("T")
def transform(data: List[int], ret_type: Callable[[List[int]], T] = set) -> T:
return ret_type(data)
a = [1, 2, 3]
my_set: Set = transform(a)
上面的代码从 mypy mypy3: Incompatible default for argument "ret_type" (default has type "Type[Set[Any]]", argument has type "Callable[[List[int]], T]")
ret_type
的正确类型应该是什么?
编辑
下面的代码虽然不理想,但效果很好(cf @chepner 评论)
from typing import cast, Any, Callable, TypeVar
T = TypeVar("T")
def transform(data: Any, ret_type: Callable[..., T] = cast(Callable, set)) -> T:
return ret_type(data)
您可以使用@overload为您的案例使用默认参数正确键入函数提示:
from typing import Callable, List, TypeVar, overload, Set
T = TypeVar("T")
@overload
def transform(data: List[int]) -> Set[int]: ...
@overload
def transform(data: List[int], ret_type: Callable[[List[int]], T]) -> T: ...
# untyped implementation
def transform(data, ret_type = set):
return ret_type(data)
a = [1, 2, 3]
my_set: Set = transform(a)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.