如何在不产生错误的情况下干净地测试 Mypy 中对象的相等性?

How do I cleanly test equality of objects in Mypy without producing errors?

我有以下功能:

import pandas as pd

def eq(left: pd.Timestamp, right: pd.Timestamp) -> bool:
    return left == right

当我通过 Mypy 运行 时出现以下错误:

error: Returning Any from function declared to return "bool"

我认为这是因为 Mypy 不了解 pd.Timestamp,所以将其视为 Any。 (使用 Mypy reveal_type 函数表明 Mypy 将 leftright 视为 Any。)

处理此问题以阻止 Mypy 抱怨的正确方法是什么?

您可以将其转换为布尔值。

import pandas as pd

def eq(left: pd.Timestamp, right: pd.Timestamp) -> bool:
    return bool(left == right)

如果 mypy 不喜欢,您可以从输入中导入 cast 并使用它来将其转换为布尔值。

import pandas as pd
from typing import cast

def eq(left: pd.Timestamp, right: pd.Timestamp) -> bool:
    result = bool(left == right)
    return cast(bool, result)

我也在不使用cast命令的情况下进行了测试。 Mypy 检查无误通过,代码如下:

import pandas as pd

def eq(left: pd.Timestamp, right: pd.Timestamp) -> bool:
    return bool(left == right)

(使用 Mypy 0910 测试。)