Selbstreferenz oder Vorwärtsreferenz von Typanmerkungen in Python [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Typhinweise: Zirkuläre Abhängigkeit lösen 1 Antwort

Ich versuche herauszufinden, wie die Selbstreferenz von Typen mit @ funktionier Python3 Typ Anmerkungen - In den Dokumenten wird diesbezüglich nichts angegeben.

Als Beispiel

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

Dieser Code generiert den Fehler:

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

Dies verwendet Python 3.5.1

Antworten auf die Frage(2)

Ihre Antwort auf die Frage