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).
python/typeshed#2323 exposed a problem with mypy's (lack of) handling of protocols in
... if ... else ...constructs. Please consider:This will reveal the type of the first expression to be
builtins.object, while the latter istyping.SupportsFloat. This means that mypy (tested with 0.620, Python 3.7.0) will reject, for examplefloat(Floaty() if bool() else 0).