微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基于 MyPy 中的重载变体缩小参数类型

如何解决基于 MyPy 中的重载变体缩小参数类型

我有以下代码,我不知道如何避免基于函数的重载变体缩小函数参数的问题:

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 举报,一经查实,本站将立刻删除。