传递子类类型给基类参数时触发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
相关产品推荐
相关产品推荐

