【问题标题】:mypy error: Incompatible return value type (got "Union[bool_, ndarray]", expected "bool")mypy 错误:返回值类型不兼容(得到“Union[bool_, ndarray]”,预期为“bool”)
【发布时间】:2022-01-08 23:47:22
【问题描述】:

我有一个如下所示的类:

import numpy as np

class TestClass():

    def __init__(self, a: np.ndarray):
        self.a = a

    def __eq__(self, other: object) -> bool:
        if not isinstance(other, TestClass):
            raise TypeError
        return (np.all(self.a == other.a))

Mypy 返回错误Incompatible return value type (got "Union[bool_, ndarray]", expected "bool")。根据documentation for np.all,这个函数应该返回一个带有这些类型输入的常规布尔值。这种行为有原因吗?

【问题讨论】:

    标签: python type-hinting mypy


    【解决方案1】:

    这是静态类型检查的限制(或者至少是为numpy 提供的类型注释)。 np.all 函数在使用您显示的参数调用时返回一个 bool 值,但它可以在使用其他参数调用时返回其他类型(具体来说,如果您传递 keepdims=True 它将返回一个维数与原始输入相同的单元素数组)。

    您链接到的文档显示了这一点:

    返回:全部:ndarray, bool

    对于您展示的情况,您实际上根本不需要numpy,因为您首先没有处理数组。为什么不使用and 运算符,或者内置的all 函数?

    def __eq__(self, other: object) -> bool:
        if not isinstance(other, TestClass):
            raise TypeError
        return all((other.a, self.a))      # or bool(other.a and self.a)
    

    【讨论】:

      猜你喜欢
      • 2021-12-31
      • 1970-01-01
      • 2021-05-08
      • 2017-10-14
      • 2017-07-03
      • 2021-04-15
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      相关资源
      最近更新 更多