Open
Description
To Reproduce
Run mypy on the following code:
class C:
def __init__(self, a: str) -> None:
if a is None:
self.x = 123
else:
self.x = 456
It will output:
testcase.py:6: error: Cannot determine type of 'x'
Line 6 contains the second assignment to self.x
.
Expected Behavior
mypy should be able to determine that the type of C.x
is int
.
Actual Behavior
The fact that a
is annotated as str
means that mypy determines that a is None
is never true and therefore the first assignment to self.x
is unreachable. The problem disappears if a
is annotated as Optional[str]
.
So it looks like mypy half-ignores the first assignment to self.x
: it doesn't use the type information available there since the code is unreachable, but it still considers it the assignment that determines the type of self.x
.
Your Environment
mypy 0.790 with default configuration, running on Python 3.8.5 on openSUSE Linux.