Auto-referencia o referencia directa de anotaciones de tipo en Python [duplicado]

Esta pregunta ya tiene una respuesta aquí:

Sugerencias de tipo: resolver dependencia circular 1 respuesta

Estoy tratando de descubrir cómo funciona la autorreferencia de tipos conanotaciones de tipo python3 - los documentos no especifican nada al respecto.

Como ejemplo:

from typing import TypeVar, Optional, Generic

T = TypeVar('T')
class Node(Generic[T]):
    left = None
    right = None
    value = None

    def __init__(
        self, value: Optional[T],
        left: Optional[Node[T]]=None,
        right: Optional[Node[T]]=None,
    ) -> None:
        self.value = value
        self.left = left
        self.right = right

Este código genera el error:

Traceback (most recent call last):
  File "node.py", line 4, in <module>
    class Node(Generic[T]):
  File "node.py", line 12, in Node
    right: Optional[Node[T]]=None,
NameError: name 'Node' is not defined

Esto está usando Python 3.5.1

Respuestas a la pregunta(1)

Su respuesta a la pregunta