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

传递子类类型给基类参数时触发Mypy错误,是否为自身问题?

问题分析:Mypy报类型不兼容错误的原因

这是你的代码问题,不是Mypy的bug。

错误原因:

你给foo函数的参数bar标注的类型是A,这意味着它期望接收**A类的实例对象**,而不是A类本身或者它的子类类对象。但你调用foo(B)时,传入的是B这个类(类型为Type[B]),和注解要求的A实例类型完全不匹配,所以Mypy会抛出类型不兼容的错误。

两种修正方案:

  • 如果foo需要接收类对象:
    修改类型注解为Type[A],明确表示要接收A或其子类的类本身:

    from abc import ABC
    from typing import Type
    
    class A(ABC):
        ...
    
    class B(A):
        ...
    
    def foo(bar: Type[A]): ...
    
    foo(B)  # 类型匹配,Mypy不再报错
    
  • 如果foo需要接收实例对象:
    调用时传入B的实例,而不是B类本身:

    from abc import ABC
    
    class A(ABC):
        ...
    
    class B(A):
        ...
    
    def foo(bar: A): ...
    
    foo(B())  # 传入B的实例,符合类型注解要求
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:55:37