В каких обстоятельствах это возможно, а когда невозможно, назначить атрибуту __class__ экземпляра в Python?
Сообщения об ошибках, такие как TypeError: __class__ assignment: only for heap types, на самом деле не делают этого для меня.
Ответ 1
Вы можете назначить только атрибуту __class__ экземпляра определяемого пользователем класса (т.е. с использованием ключевого слова class), а новое значение также должно быть определяемым пользователем классом. Являются ли классы новыми или старыми, не имеет значения. (Вы не можете их смешивать. Вы не можете превратить экземпляр класса старого стиля в экземпляр класса нового стиля.) См. Также this issue в отладчике ошибок Python, который также жалуется, что сообщение об ошибке несколько сложно понять.
Просто добавьте то, что сказал Рейф в приведенном выше комментарии: Никогда не делайте этого в производстве.