Clase que toma selfies

Implementa una clase Selfie que pueda almacenar el estado actual del objeto en forma de cadena binaria. Puede tomar varias instantáneas y luego recuperar un estado anterior. Durante las pruebas, se proporcionarán a un objeto nuevos atributos y sus valores. Este almacenará su estado. Luego, los valores cambiarán. Después, se le proporcionarán nuevos atributos. Volverá a almacenar su estado. Esto se repetirá varias veces.

Más adelante, los estados del objeto se recuperarán proporcionando un índice. El valor devuelto debe ser un nuevo Selfie con el estado histórico solicitado, y el historial de estados del nuevo objeto debe actualizarse con una copia del historial de estados del objeto actual.

El objeto también sabe cuántos estados ha almacenado. Si el índice no se encuentra dentro del rango de estados almacenados, el objeto permanece sin cambios. Si el argumento no es válido, n < 0 or n >= self.n_states(), se debe devolver el objeto actual (o una copia de este).

Ejemplos

p = Selfie()
p.x = 2
p.save_state()
p.x = 5
p = p.recover_state(0)
p.x ➞ 2

Notas

  • No se permite usar variables globales fuera de la clase.
  • Cuando un objeto se restaura a un estado anterior, conserva todos los estados guardados.