Recursive Typing in Python 3.5+ [duplicate]

You can use Forward References as defined in PEP 484

A situation where this occurs commonly is the definition of a
container class, where the class being defined occurs in the signature
of some of the methods. For example, the following code (the start of
a simple binary tree implementation) does not work:

class Tree:
    def __init__(self, left: Tree, right: Tree):
        self.left = left
        self.right = right

To address this, we write:

class Tree:
    def __init__(self, left: 'Tree', right: 'Tree'):
        self.left = left
        self.right = right

It is allowable to use string literals as part of a type hint, for
example:

class Tree:
    ...
    def leaves(self) -> List['Tree']:

Leave a Comment