Prof. Dr. L. Humbert
It is indeed possible to run the following code / from typing import List class Tree: def __init__(self, left: 'Tree', right: 'Tree'): self.left = left self.right = right def leaves(self) -> List['Tree']: return [] def greeting(name: 'str') -> 'str': return 'Hello ' + name \
but not … def leaves(self) -> 'List'['Tree']: … which would be orthogonal, when deciding to put all used types in '…'
Perhaps there will be a chance to make this a valid construction?
The issue is that Python does not have separate type/value universes. 'Tree' is just a type hint, not a type in the conventional sense. I would very much like if Python *did* have separate types/values, so that one could write (OCaml): class tree (left : tree) (right : tree) = object val left = left val right = right end ;; Which is an uninhabited type, since you need a tree to construct a tree! :) Thus: class tree (left : tree option) (right : tree option) = object val left = left val right = right end ;; Stefan Krah