I have the following example piece of code
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)
When running mypy on it, this warning appears:
Argument 1 to "__init__" of "A" has incompatible type "Dict[C, Any]"; expected "Dict[P, Any]"
Why is this happening? If I do the same, but without using Dict[], ie:
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)
I get no complains. I tried using Mapping[] instead of Dict[] but the same warning occurs.
This happens a lot in the code, as I am subclassing from a Library class, I cannot use cast every time, it's counter productive
Environment
Duplicate of https://github.com/python/typing/issues/445 and https://github.com/python/mypy/issues/1114 (see also https://github.com/python/typing/pull/273#issuecomment-243864718)
Most helpful comment
Duplicate of https://github.com/python/typing/issues/445 and https://github.com/python/mypy/issues/1114 (see also https://github.com/python/typing/pull/273#issuecomment-243864718)