mirror of
https://github.com/python/cpython.git
synced 2025-08-01 07:33:08 +00:00
[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:
parent
b0a50a69cf
commit
cfdf376e2a
2 changed files with 47 additions and 4 deletions
|
@ -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):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue