Guido van Rossum added the comment: 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. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue26391> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com