This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author gvanrossum
Recipients Kai Wohlfahrt, gvanrossum
Date 2016-03-26.00:27:53
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1458952073.92.7.31417212008e-06.issue26391@psf.upfronthosting.co.za>
In-reply-to
Content
Actually, I just realized why this is. Generic.__new__() calls next_in_mro.__new__(_gorg(cls)). Here next_in_mro is just object, but _gorg(cls) is Foo, in the case where cls is Bar (i.e. Foo[str]). The _gorg() call strips the [str] part of the type.

So far so good. Where it gets interesting is that, in general in Python, whenever __new__(cls, ...) returns an object whose class is not cls, it is presumed to be an already properly initialized object!

I think I can fix this by calling __init__() explicitly in the case where _gorg(cls) is not cls.

The reason, BTW, why it strips the [str] part of the class is because that's what PEP 484 says, in the same section where it says that Node[T]() and Node[int]() are allowed:

> At runtime the type is not preserved, and the class of ``x`` is just
> ``Node`` in all cases.

So this bit of code is trying to do the right thing but obviously hasn't been tested much, because mypy disallows that syntax.
History
Date User Action Args
2016-03-26 00:27:53gvanrossumsetrecipients: + gvanrossum, Kai Wohlfahrt
2016-03-26 00:27:53gvanrossumsetmessageid: <1458952073.92.7.31417212008e-06.issue26391@psf.upfronthosting.co.za>
2016-03-26 00:27:53gvanrossumlinkissue26391 messages
2016-03-26 00:27:53gvanrossumcreate