You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

类型提示下用isinstance,如何消除Mypy的不可达代码警告?

解决方案

要让Mypy认可这个运行时类型检查,同时保留类型安全,可以调整__add__方法的参数类型标注,并利用Mypy的类型守卫特性:

  1. 将other的类型标注从str改为object——Python的特殊方法(如__add__)在运行时确实可能接收任意类型的参数,这个标注更贴合实际执行场景。
  2. 保留isinstance(other, str)的检查,Mypy会将这个检查视为类型守卫,自动推断检查通过后other的类型为str,既不会认为后续代码有问题,也不会标记前面的return NotImplemented为不可达。

修改后的代码如下:

class Foo:
    def __init__(self, string: str) -> None:
        self._string = string
    def __add__(self, other: object) -> str | NotImplemented:
        if not isinstance(other, str):
            return NotImplemented
        return f'{self._string}foo{other}'

说明

  • 参数类型改为object后,Mypy会意识到other可能是任意类型,因此isinstance检查是有意义的,不会再标记return NotImplemented为不可达代码。
  • 返回类型标注为str | NotImplemented,明确了方法可能的返回值类型,符合Mypy的类型检查要求,同时也和实际运行时的行为一致。
  • 运行时逻辑完全保留:当other不是字符串时返回NotImplemented,让Python尝试调用对方的__radd__方法,若也无法处理则抛出TypeError,符合Python的运算符重载规范。

内容的提问来源于stack exchange,提问作者InSync

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 07:36:00