This is explicitly documented in the reference manual:
Nonempty _slots_ does not work for classes derived from “variable-length” built-in types such as int, bytes and tuple.
and it is the case, writing:
class MyInt(int):
__slots__ = 'spam',
results in:
TypeError: nonempty __slots__ not supported for subtype of 'int'
why is this, though? Why can empty slots be used but non empty ones forbidden?