Неясно, для чего и как применяется Optional[].
В примере ниже я задаю переменную типа Optional[Point]. Я ожидал что при присвоении переменной значения другого типа вылетит ошибка времени исполнения, но нет. Спокойно присваивается и 5 и "hello". Смысл тогда использовать Optional? Или я делаю что-то не так?
from typing import Optional
class Point:
    def __init__(self,val):
        self.x = val
    def __str__(self):
        return str(self.x)
a : Optional[Point]
b : Optional[Point]
c : Optional[Point]
a = None      # 
b = 5             #здесь должна быть ошибка ??
c = Point(22)
a = "hello"     #здесь должна быть ошибка ??