On Thu, Sep 22, 2016 at 12:35 PM, אלעזר <elazarg@gmail.com> wrote:
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.