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.

Python-ideas mailing list
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to