问题描述
我有以下代码,我不知道如何避免基于函数的重载变体缩小函数参数的问题:
from typing import Union
from typing import Callable
from typing import overload
class A:
pass
class B:
pass
class C:
pass
class D:
pass
@overload
def f(x: A) -> C:...
@overload
def f(x: B) -> D:...
def f(x: Union[A,B]) -> Union[C,D]:
if isinstance(x,A):
return C()
else:
return D()
@overload
def g(x: A,func: Callable[[C],bool]) -> None:...
@overload
def g(x: B,func: Callable[[D],bool]) -> None:...
def g(x: Union[A,B],func: Union[Callable[[C],bool],Callable[[D],bool]]) -> None:
obj = f(x)
func(obj)
test.py:37: error: Argument 1 has incompatible type "Union[C,D]"; expected "C"
test.py:37: error: Argument 1 has incompatible type "Union[C,D]"; expected "D"
MyPy 无法根据重载变体缩小参数类型,有没有办法克服这个问题?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)