Python - Cambiar clase de un objeto

 
Vista:
sin imagen de perfil

Cambiar clase de un objeto

Publicado por Json (2 intervenciones) el 20/02/2016 00:03:15
Hola a todos,

soy nuevo en el foro y estoy empezando a programar en python y tengo algunas dudas en algo que podría ser generalizado a cualquier lenguaje orientado a objetos pero lo pregunto aquí ya que lo estoy programando en python.

Mi situación es la siguiente. Supongamos que creo una clase Persona de la cual heredan diferentes clases por ejemplo Escritor, Panadero, Mecánico, ....
Estas subclases compartirían algunos atributos y métodos (de la clase Persona) pero tendrían otros particulares de cada uno de ellas (hasta aquí lo normal).

Ej:
----- Clase persona
------- Atributos: nombre, fecha de nacimiento, ciudad
------- Métodos: hablar, respirar

----- Clase Escritor (hereda de Persona)
------- Atributos: tipo de caligrafía, nivel de ortografía
------- Métodos: escribir, narrar

----- Clase Mecánico (hereda de Persona)
------ Atributos: fuerza, destreza
------ Métodos: repararPieza, probarCoche

Mi problema viene cuando en cierto momento un escritor cambia de trabajo de escritor a mécanico, por ejemplo. En ese momento no sé cómo actuar, si sería posible en cierta forma cambiar la clase.
Mi forma de hacerlo hasta ahora es guardar los datos (atributos) de la clase Escritor relativos a la superclase Persona (nombre, fecha de nacimiento, ciudad), eliminar el objeto de la clase Escritor y crear un nuevo objeto de la clase Mécanico con los datos almacenados (nombre, fecha de nacimiento, ciudad). Así consigo un objeto que tiene las mismos atributos "básicos" (nombre, fecha de nacimiento, ciudad) pero que tiene los atributos de la nueva clase Mécanico.

En cuanto a la información que se "pierde", la base de datos almacena los cambios históricos de cambios de trabajo y realmente no se perdería la información.

Me gustaría saber si hay una forma más correcta de hacer este tipo de cambios, o si lo que debería hacer es cambiar la implementación ya que esta forma de crear las clases y objetos no es adecuada en este caso.

Muchas gracias a todos, cualquier idea o sugerencia se agradece.

Un saludo!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder