Bug report
See #118099 (comment) and #118033
We now correctly check for __dictoffset__ and __weakoffset__ on C types without __slots__ defined:
| matchcls.__dict__.get('__slots__'): |
| # `__dictoffset__` and `__weakrefoffset__` can tell us whether |
| # the base type has dict/weakref slots, in a way that works correctly |
| # for both Python classes and C extension types. Extension types |
| # don't use `__slots__` for slot creation |
| caseNone: |
| slots= [] |
| ifgetattr(cls, '__weakrefoffset__', -1) !=0: |
| slots.append('__weakref__') |
| ifgetattr(cls, '__dictrefoffset__', -1) !=0: |
| slots.append('__dict__') |
| yieldfromslots |
But, not in this case:
| casestr(slot): |
| yieldslot |
| # Slots may be any iterable, but we cannot handle an iterator |
| # because it will already be (partially) consumed. |
| caseiterableifnothasattr(iterable, '__next__'): |
| yieldfromiterable |
So, in theory there might be C types with __slots__ and __dictoffset__ and __weakoffset__.
I will investigate!
Bug report
See #118099 (comment) and #118033
We now correctly check for
__dictoffset__and__weakoffset__on C types without__slots__defined:cpython/Lib/dataclasses.py
Lines 1201 to 1212 in c68acb1
But, not in this case:
cpython/Lib/dataclasses.py
Lines 1213 to 1218 in c68acb1
So, in theory there might be C types with
__slots__and__dictoffset__and__weakoffset__.I will investigate!