On Thu, Sep 22, 2016 at 10:58 PM David Mertz <me...@gnosis.cx> wrote:

> 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.
>
> Mypy fails on this, and version 4.4 fails very hard and ugly, with errors
for each line to the end of the file + 1. It can be fixed of course, but
it's worth noting: mypy does not expect arbitrary expression - because it
is an annotation.

Elazar
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to