Guido van Rossum writes:
But that's not what type comments mean! They don't annotate the expression. They annotate the variable.
In PEP 484. But syntactically, AFAICS in an initialization that's a distinction without a difference. It would be perfectly possible to write a checker that allows
if cond: x: str = "a string, what else?" else: x: int = 1
and infers the union, and even infers the types from the expressions in
if cond: x = "a string, what else?" else: x = 1
Once you have that, then the only things that are really being typed are the initializer expressions.
I don't understand why some people seem to think that is a *good* typechecker (if that's it's normal mode of operation). But as a tool to identify the types that untyped (or ambiguously-typed) code actually uses, review them, and help produce a precisely typed version, it seems perfectly plausible to me.