Numpy与mypy类型注解疑问:npt.NDArray的dtype未被检查
为什么Mypy未对不匹配dtype的数组调用报错
未启用Numpy类型检查插件:
Mypy本身无法单独精确识别npt.NDArray的dtype约束,必须安装并启用mypy-numpy插件才能实现这一功能。默认状态下,Mypy会把npt.NDArray[np.float64]当成通用的np.ndarray类型处理,任何np.ndarray实例都能通过类型检查,不管其实际dtype是否匹配。np.array()的默认类型推断不精确:
调用np.array([1])、np.array([True])这类未显式指定dtype的代码时,Mypy默认会将其推断为宽泛的np.ndarray[Any, Any]类型,而非带具体dtype的npt.NDArray。这种宽泛类型会被Mypy判定为与npt.NDArray[np.float64]兼容,因此不会触发报错。默认的协变类型规则:
在Mypy默认配置中,npt.NDArray的dtype参数被视为协变类型,即子类dtype的数组可以赋值给父类dtype的数组类型。启用严格的Numpy类型插件后,这一规则会被修正为更严格的不变检查,此时不匹配dtype的数组调用才会触发报错。
内容的提问来源于stack exchange,提问作者Gustavo Alves
相关产品推荐
相关产品推荐

