-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Open
Labels
bugmypy got something wrongmypy got something wrong
Description
Bug Report
Nested functions inside methods incorrectly resolve attributes of their first argument relative to the surrounding class.
To Reproduce
class foo:
a: str = "foo"
class bar:
class a:
pass
def test(self) -> None:
def inner1(f: foo, s: str) -> bool:
return f.a == s
def inner2(s: str, f: foo) -> bool:
return f.a == shttps://mypy-play.net/?mypy=latest&python=3.11&flags=strict&gist=4c27f653074cd1c3a48bb16f49ca2168
Expected Behavior
As far as I can tell this should be valid code, even though this rarely happens in practice due to CamelCase vs snake_case naming conventions.
Actual Behavior
inner1 fails to type-check, because the a attribute is incorrectly assumed to be the a class inside bar
main.py:10: error: Non-overlapping equality check (left operand type: "Type[a]", right operand type: "str") [comparison-overlap]
Interestingly, inner2 is fine.
Your Environment
- Mypy version used: 1.2.0
- Mypy command-line flags:
--strict - Mypy configuration options from
mypy.ini(and other config files): none - Python version used: 3.11
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugmypy got something wrongmypy got something wrong