首页 > 解决方案 > Mypy 未正确处理包含子类的字典参数

问题描述

我有以下示例代码

from typing import Any, Dict


class P:
    pass

class C(P):
    pass

class A:
    def __init__(self, x: Dict[P, Any]):
        pass

class B(A):
    def __init__(self, x: Dict[C, Any]):
        super().__init__(x)

在其上运行 mypy 时,会出现以下警告:

“A”的“ init ”的参数 1具有不兼容的类型“Dict[C, Any]”;预期“字典 [P,任何]”

为什么会这样?如果我也这样做,但不使用Dict[],即:

class P:
    pass

class C(P):
    pass

class A:
    def __init__(self, x: P):
        pass

class B(A):
    def __init__(self, x: C):
        super().__init__(x)

我没有抱怨。我尝试使用Mapping[]而不是Dict[]但出现相同的警告。我该如何处理?它是一个 Mypy 错误吗?我应该在 Github 页面中将其作为问题提及吗?这在代码中经常发生,因为我是从库类中继承的,我不能每次都使用强制转换,这会适得其反

标签: pythoninheritancesubclasstype-hintingmypy

解决方案


推荐阅读