New submission from Dan Snider <[email protected]>:
>>> class a(dict): __slots__ = '__dict__', 'x'
>>> class b(dict): __slots__ = '__dict__', 'x'
>>> self = a(); self.__class__ = b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
self=a(); self.__class__ = b
TypeError: __class__ assignment: 'b' object layout differs from 'a'
This always occurs when __dict__ and/or __weakref__ are defined as slots, even
when both classes have otherwise identical slots. This behavior appears to
contradict what the docs say wrt to __class__ assignment, which is (in its
entirety):
"__class__ assignment works only if both classes have the same __slots__. "
Not sure if this is just a case of ambiguous documentation and intentional
behavior or not. Since two classes with identical slots will always have
identical internal struct layouts, I can't see a reason for this error.
----------
messages: 328296
nosy: bup
priority: normal
severity: normal
status: open
title: Can't reassign __class__ despite the assigned class having identical
slots
versions: Python 3.7
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue35048>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com