Solo puede asignar el atributo __class__
de una instancia de una clase definida por el usuario (es decir, se define utilizando la palabra clave class
), y el nuevo valor también debe ser una clase definida por el usuario. Si las clases son de estilo nuevo o estilo antiguo no importa. (No se pueden mezclar, sin embargo. No se puede convertir una instancia de clase antigua en una instancia de clase de estilo nuevo.) Consulte también this issue en el rastreador de fallos de Python, que también se queja de que el mensaje de error es algo difícil de entender.
Solo para agregar lo que dijo Rafe en el comentario anterior: Nunca haga esto en la producción.
@Rafe: en realidad, Django utiliza este truco en su código de autenticación –
tarde para la fiesta, pero matplotlib también lo hace en código de producción (en algunos de los gráficos 3D). – tacaswell