Closed
Description
python/typeshed#2323 exposed a problem with mypy's (lack of) handling of protocols in ... if ... else ...
constructs. Please consider:
from typing import SupportsFloat
class Floaty:
def __float__(self): ...
class Supporter(SupportsFloat):
def __float__(self): ...
reveal_type(Floaty() if bool() else 0)
reveal_type(Supporter() if bool() else 0)
This will reveal the type of the first expression to be builtins.object
, while the latter is typing.SupportsFloat
. This means that mypy (tested with 0.620, Python 3.7.0) will reject, for example float(Floaty() if bool() else 0)
.