On Thu, Sep 22, 2016 at 12:35 PM, אלעזר
I think we're talking about different things here. I just referred to the common need to use the name of the current class in type annotation
class A: def add(self, other: A) -> A: ...
Yeah, I find the need for using the string "A" here a wart. Rather than change the entire semantics of annotations, it feels like a placeholder for this meaning would be better. E.g.: class A: def __add__(self, other: CLS) -> CLS: ... A static checker could do the magic of recognizing that special name easily enough (no harder than recognizing the quoted string). At runtime 'CLS' could either just be a singleton with no other behavior... or perhaps it could be some sort of magic introspection object. It's more verbose, but you can also spell it now as: class A: def __add__(self, other: type(self)) -> type(self): ... That's a little ugly, but it expresses the semantics we want. -- Keeping medicines from the bloodstreams of the sick; food from the bellies of the hungry; books from the hands of the uneducated; technology from the underdeveloped; and putting advocates of freedom in prisons. Intellectual property is to the 21st century what the slave trade was to the 16th.