Message 307182 - Python tracker (original) (raw)

When superclass inherits from Generic, attributes set for a subclass are incorrectly propagated to its superclass.

Without Generic attribute access raises an exception:

class X:
    def __init_subclass__(cls, **kwargs):
        super().__init_subclass__(**kwargs)
        cls.attr = 42

class Y(X):
    pass

Y.attr  # 42
X.attr  # AttributeError

With Generic it does not:

import typing

T = typing.TypeVar('T')

class X(typing.Generic[T]):
    def __init_subclass__(cls, **kwargs):
        super().__init_subclass__(**kwargs)
        cls.attr = 42

class Y(X):
    pass

Y.attr  # 42
X.attr  # 42