Good question.
In early revisions of PEP 484 you could write
def foo(a: int = None) -> ...
and it would imply that the type of 'a' was really Optional[int].
After several years of practice we decided to *remove* this automatic optionalization because it was widely misunderstood and/or confusing for users. For the whole discussion, see
https://github.com/python/typing/issues/275. (Also, PEP 484 still mentions it -- "A past version of this PEP allowed ...")
In fact, mypy still defaults to this behavior, and you have to request the new, stricter PEP 484 behavior with `--no-implied-optional`.
Maybe we could satisfy both sides if the notation for Optional[X] was truly short, like ?X or -X. But that has its own issues -- none of the existing unary operators (+X, -X, ~X) really satisfies, and ?X would require a syntax change (and would forever fix the meaning of one of the last ASCII punctuation characters that has no meaning in Python -- $ being the other one).
Finally, I wish the whole term "optional" would go away, because of the endless confusion with optional parameters and optional dict keys -- in these contexts the word is widely used to mean "may or may not be present", without implying that the type may include None.
But I digress...
--Guido