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/