Currently we have
classA(Generic[T]):
x=NoneA[int].x=1A[str].x='a'print(A[int].x) # prints 1print(A[int]().x) # prints None, since type is erased on instantiation
@JukkaL argues and I agree with him, that this looks wrong. Conceptually, there should be only one runtime class. I think we can implement this without loosing the current runtime generic information by tweaking descriptor __dict__ of GenericMeta, so that all assignments and look-ups on subscripted class objects like A[int] will be transferred to the original class object A.
@gvanrossum What do you think?
Currently we have
@JukkaL argues and I agree with him, that this looks wrong. Conceptually, there should be only one runtime class. I think we can implement this without loosing the current runtime generic information by tweaking descriptor
__dict__ofGenericMeta, so that all assignments and look-ups on subscripted class objects likeA[int]will be transferred to the original class objectA.@gvanrossum What do you think?