Message262477
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. |
|
Date |
User |
Action |
Args |
2016-03-26 00:27:53 | gvanrossum | set | recipients:
+ gvanrossum, Kai Wohlfahrt |
2016-03-26 00:27:53 | gvanrossum | set | messageid: <1458952073.92.7.31417212008e-06.issue26391@psf.upfronthosting.co.za> |
2016-03-26 00:27:53 | gvanrossum | link | issue26391 messages |
2016-03-26 00:27:53 | gvanrossum | create | |
|