Reputation: 17954
When using mypy and pyre-check to check type errors of the following code, neither produces an error:
from typing import List, Union
tlist: List[Union[str, float]] = [False, int(12)]
Just curious why is that?
Upvotes: 0
Views: 993
Reputation: 1124178
bool
is a subclass of int
, which means they are both natural numbers. Natural numbers are a subset of real numbers, so they are acceptable where a float is acceptable.
That int
is acceptable where float
is specified is explicitly called out in PEP 484 -- Type Hints:
Rather than requiring that users write
import numbers
and then usenumbers.Float
etc., this PEP proposes a straightforward shortcut that is almost as effective: when an argument is annotated as having typefloat
, an argument of typeint
is acceptable[.]
The str
component in your Union[]
doesn't play any role here; you could remove it and still the assignment would be accepted. It's purely the float
type annotation that makes 12
and False
acceptable values.
The int()
call is entirely redundant, the 12
literal syntax already produces an int
object.
Upvotes: 3