mirror of https://github.com/python/cpython
gh-123935: Fix typo in `_get_slots` in `dataclasses.py` (#123941)
This commit is contained in:
parent
43303e362e
commit
ac918ccad7
|
@ -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):
|
||||
|
|
|
@ -3664,6 +3664,25 @@ class TestSlots(unittest.TestCase):
|
|||
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.
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Fix parent slots detection for dataclasses that inherit from classes with
|
||||
``__dictoffset__``.
|
Loading…
Reference in New Issue