Назначение атрибута __class__ экземпляра в Python - PullRequest
21 голосов
/ 29 января 2011

При каких обстоятельствах возможно и когда невозможно присвоить атрибут __class__ экземпляра в Python?

Сообщения об ошибках, такие как TypeError: __class__ assignment: only for heap types, на самом деле не делают это для меня.

1 Ответ

15 голосов
/ 29 января 2011

Вы можете назначить только атрибут __class__ экземпляра пользовательского класса (т. Е. Определенного с помощью ключевого слова class), и новое значение также должно быть пользовательским классом. Неважно, являются ли классы новым или старым стилем. (Однако вы не можете смешивать их. Вы не можете превратить экземпляр класса старого стиля в экземпляр класса нового стиля.) См. Также эту проблему в системе отслеживания ошибок Python, которая также жалуется сообщение об ошибке несколько трудно понять.

Просто добавьте, что Рэйф сказал в вышеприведенном комментарии: Никогда не делайте этого в производстве .

...