On 22 September 2016 at 22:02, אלעזר <elaz...@gmail.com> wrote: > 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. >> > Concerning the __add__ method, I think a more typical type for it is
T = TypeVar('T', bound='A') class A: def __add__(self: T, other: T) -> T: ... There is a plan to support this in one of next releases of mypy. In general I think it is a bit early to judge what would be the best solution for forward references. (there are related issues like performance drop etc). More evidence is needed to decide a way forward. -- Ivan
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/