如何解决不确定为什么会生成mypy“分配中的不兼容类型”
让我感到困惑的简单示例:
for (String artist : artists) {
String[] split = artist.split(" ");
// add some data validation to avoid ArrayIndexOutOfBounds
String name = split[0];
String genre = split[1];
}
mypy抱怨“ your_func2”具有不兼容的类型:
from typing import Callable,List,Union
Value = Union[bool,int,str]
Helper = Callable[[Value],List[Value]]
def func_with_alias(aa: Value) -> List[Value]:
return []
def func_with_type(aa: bool) -> List[Value]:
return []
your_func1: Helper = func_with_alias
your_func2: Helper = func_with_type
为什么error: Incompatible types in assignment (expression has type "Callable[[bool],List[Union[bool,str]]]",variable has type "Callable[[Union[bool,str]],str]]]")
在bool
中却不让我这样做?
Union[bool,str]
解决方法
让我们看看您在类型定义中的意思:
Value = Union[bool,int,str]
值可以是布尔值,整数或字符串。
Helper = Callable[[Value],List[Value]]
帮助程序获取值并返回值列表。
现在分配出现错误:
def func_with_type(aa: bool) -> List[Value]:
return []
your_func2: Helper = func_with_type
func_with_type
仅接受布尔值,但是您将其分配给应该也可以接受整数或字符串的类型。
要了解为什么这样做没有意义,请考虑以下Helper
函数的消费者:
def consumer(func: Helper) -> List[Value]:
return func("Hello,world!")
Helper
可以使用Value
,bool
或int
的{{1}},因此这种用法应该很好。但是str
仅接受func_with_type
,因此无法以这种方式调用,因此我们不能将其视为bool
。
我实际上正在做的是建立一个具有 实际的类(例如bool,int或str)和一个函数的值 处理它。返回值是一个值列表(例如bool,int或 str)。
可能想要的是generic函数,其中泛型类型受联合约束:
Helper
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。