You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have a global constant I've marked with Final. In a class definition, I use this constant to swap out implementations of a method. While inside a type guarding block, but outside the method definition, the type of the Final object is narrowed, but inside of the method it is not narrowed.
fromtypingimport*def_init() ->None|str:
returnNoneRESOLVE_X: Final=_init()
classExample:
ifRESOLVE_XisnotNone:
reveal_type(RESOLVE_X) # note: Revealed type is "builtins.str"def__str__(self) ->str:
returnRESOLVE_X# error: Incompatible return value type (got "str | None", expected "str") [return-value]else:
def__str__(self) ->str:
return"example"
Expected Behavior
Inside the __str__ definition in the if RESOLVE_X is not None: block, RESOLVE_X should stay narrowed as it cannot be reassigned and have its type re-widened in the future.
Actual Behavior
main.py:12: note: Revealed type is "builtins.str"
main.py:15: error: Incompatible return value type (got "str | None", expected "str") [return-value]
Found 1 error in 1 file (checked 1 source file)
Your Environment
Mypy version 1.15.0.
Python 3.12.
The text was updated successfully, but these errors were encountered:
Fixes#19080. There is no point applying our heuristics if the variable
is declared Final - it is not reassigned anywhere.
---------
Co-authored-by: Shantanu <[email protected]>
Bug Report
I have a global constant I've marked with
Final
. In a class definition, I use this constant to swap out implementations of a method. While inside a type guarding block, but outside the method definition, the type of theFinal
object is narrowed, but inside of the method it is not narrowed.To Reproduce
https://mypy-play.net/?mypy=latest&python=3.12&gist=2d4c97cffea1dd6710bf5cc7283f7290
Expected Behavior
Inside the
__str__
definition in theif RESOLVE_X is not None:
block, RESOLVE_X should stay narrowed as it cannot be reassigned and have its type re-widened in the future.Actual Behavior
Your Environment
Mypy version 1.15.0.
Python 3.12.
The text was updated successfully, but these errors were encountered: