In Python 3.5, type annotations were added (see here).
Is there a way of defining recursive type annotations, such as for a tree-like structure?
class Employee(object): def __init__(self, name: str, reports: List[Employee]): self.name = name self.reports = reports
In the above, it doesn't seem as though the annotation List[Employee]
works. Running the code results in this error:
NameError: name 'Employee' is not defined
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']:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With