Skip to content

Commit

Permalink
pythongh-123935: Fix typo in _get_slots in dataclasses.py (python…
Browse files Browse the repository at this point in the history
  • Loading branch information
sobolevn authored Sep 12, 2024
1 parent 43303e3 commit ac918cc
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 1 deletion.
2 changes: 1 addition & 1 deletion Lib/dataclasses.py
Original file line number Diff line number Diff line change
Expand Up @@ -1208,7 +1208,7 @@ def _get_slots(cls):
slots = []
if getattr(cls, '__weakrefoffset__', -1) != 0:
slots.append('__weakref__')
if getattr(cls, '__dictrefoffset__', -1) != 0:
if getattr(cls, '__dictoffset__', -1) != 0:
slots.append('__dict__')
yield from slots
case str(slot):
Expand Down
19 changes: 19 additions & 0 deletions Lib/test/test_dataclasses/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3664,6 +3664,25 @@ class A(WithDictSlot): ...
self.assertEqual(A().__dict__, {})
A()

@support.cpython_only
def test_dataclass_slot_dict_ctype(self):
# https://github.com/python/cpython/issues/123935
from test.support import import_helper
# Skips test if `_testcapi` is not present:
_testcapi = import_helper.import_module('_testcapi')

@dataclass(slots=True)
class HasDictOffset(_testcapi.HeapCTypeWithDict):
__dict__: dict = {}
self.assertNotEqual(_testcapi.HeapCTypeWithDict.__dictoffset__, 0)
self.assertEqual(HasDictOffset.__slots__, ())

@dataclass(slots=True)
class DoesNotHaveDictOffset(_testcapi.HeapCTypeWithWeakref):
__dict__: dict = {}
self.assertEqual(_testcapi.HeapCTypeWithWeakref.__dictoffset__, 0)
self.assertEqual(DoesNotHaveDictOffset.__slots__, ('__dict__',))

@support.cpython_only
def test_slots_with_wrong_init_subclass(self):
# TODO: This test is for a kinda-buggy behavior.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Fix parent slots detection for dataclasses that inherit from classes with
``__dictoffset__``.

0 comments on commit ac918cc

Please sign in to comment.