Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dict arguments that contain a subclass are not handled by Mypy correctly #9738

Closed
VasLem opened this issue Nov 19, 2020 · 1 comment
Closed
Labels
bug mypy got something wrong

Comments

@VasLem
Copy link

VasLem commented Nov 19, 2020

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

  • Mypy version used: 0.790
  • Python version used: 3.8.5
  • Operating system and version: Ubuntu 20.04
@VasLem VasLem added the bug mypy got something wrong label Nov 19, 2020
@hauntsaninja
Copy link
Collaborator

hauntsaninja commented Nov 19, 2020

Duplicate of python/typing#445 and #1114 (see also python/typing#273 (comment))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug mypy got something wrong
Projects
None yet
Development

No branches or pull requests

2 participants