On Thu, Sep 22, 2016 at 12:35 PM, אלעזר <elaz...@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.
Python-ideas mailing list
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to