4

From the Python language documentation:

__class__ assignment works only if both classes have the same __slots__.

So this is expected:

>>> class A: __slots__ = ('x',)
... 
>>> class B(A): __slots__ = ('y',)
... 
>>> class C: __slots__ = ('x', 'y')
... 
>>> B().__class__ = C
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __class__ assignment: 'C' object layout differs from 'B'
>>> 

But this is unexpected:

>>> class A: __slots__ = ('x',)
... 
>>> class B(A): __slots__ = ()
... 
>>> class C: __slots__ = ('x',)
... 
>>> B().__class__ = C
>>> 

Why isn’t TypeError raised here?

Géry Ogam
  • 6,336
  • 4
  • 38
  • 67

0 Answers0