◐ Shell
clean mode source ↗

`dataclasses`: 3.12.3 regression with `weakref_slot`

Bug report

Bug description:

The __weakref__ slot is not set for classes that have a Generic[T] base.

from typing import Generic, TypeVar
from dataclasses import dataclass

T = TypeVar("T")

@dataclass(slots=True, weakref_slot=True)
class Token(Generic[T]):
    ctx: T

print(f"{Token.__slots__=!r}")
print(f"{hasattr(Token, '__weakref__')=}")

Output on 3.12.2:

Token.__slots__=('ctx', '__weakref__')
hasattr(Token, '__weakref__')=True

On 3.12.3:

Token.__slots__=('ctx',)
hasattr(Token, '__weakref__')=False

CPython versions tested on:

3.12

Operating systems tested on:

Linux, macOS, Windows

Linked PRs