[3.13] gh-91126: Docs and tests for slotted dataclasses with __init_subclass__ (GH-123342) (#123568)

gh-91126: Docs and tests for slotted dataclasses with `__init_subclass__` (GH-123342)
(cherry picked from commit 75e72822a3)

Co-authored-by: sobolevn <mail@sobolevn.me>
This commit is contained in:
Miss Islington (bot) 2024-09-01 17:19:56 +02:00 committed by GitHub
parent b0a50a69cf
commit cfdf376e2a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 47 additions and 4 deletions

View file

@ -3664,6 +3664,38 @@ class TestSlots(unittest.TestCase):
self.assertEqual(A().__dict__, {})
A()
@support.cpython_only
def test_slots_with_wrong_init_subclass(self):
# TODO: This test is for a kinda-buggy behavior.
# Ideally, it should be fixed and `__init_subclass__`
# should be fully supported in the future versions.
# See https://github.com/python/cpython/issues/91126
class WrongSuper:
def __init_subclass__(cls, arg):
pass
with self.assertRaisesRegex(
TypeError,
"missing 1 required positional argument: 'arg'",
):
@dataclass(slots=True)
class WithWrongSuper(WrongSuper, arg=1):
pass
class CorrectSuper:
args = []
def __init_subclass__(cls, arg="default"):
cls.args.append(arg)
@dataclass(slots=True)
class WithCorrectSuper(CorrectSuper):
pass
# __init_subclass__ is called twice: once for `WithCorrectSuper`
# and once for `WithCorrectSuper__slots__` new class
# that we create internally.
self.assertEqual(CorrectSuper.args, ["default", "default"])
class TestDescriptors(unittest.TestCase):
def test_set_name(self):