Evolución dinámica de los objetos a diferentes clases

Marcos Sánchez Provencio rapto en arrakis.es
Jue Ago 22 21:14:56 CEST 2002


En cosas sencillas, he probado y vale con meterle el __class__ a pelo.
Había que probarlo :-D

class a:
    def x(self):
        return 'a'

class b:
    def x(self):
        return 'b'
    
aa=a()
print aa.x()
aa.__class__=b
print aa.x()


Habría que tener cuidado con las variables de objeto (no de clase).
Vamos, si a tiene un atributo nn y b no lo tiene, habría que asignárselo
al ascenderlo.

Diabólicamente dinámico.

El jue, 22-08-2002 a las 19:50, Ernesto Revilla escribió:
> Hola,
> 
> no tiene que ver directamente con Python, más bien con programación
> orientado a objeto.
> 
> Suponed que hay una clase Persona y otras dos clases que heredan de allí,
> Cliente y Proveedor.
> 
> 1. ¿Cómo puede modelarse que un objeto 'evoluciona' de un la a otro, por
> ejemplo, Persona evoluciona a ser Cliente.
> ¿se puede cambiar la clase de un objeto dinámicamente?
> (ya sé que se puede borrar y crear un objeto nuevo de la otra clase, ¿hay
> otra manera?)
> 
> 2. ¿Cómo podría hacerse que un objeto Cliente evolucionase a una clase
> Proveedor? (Es decir, una clase que no está en la rama de la clase actual
> del árbol de herencia.)
> 
> 3. He visto alguna vez algo como esto:
> C.__bases__.append(D)   # siendo C clase y D clase
> 
> Aunque no resuelva el tema de 1. y 2., me parecía interesante, poder
> enriquecer la funcionalidad de una clase, agregandole clases bases.
> 
> Respecto a 1. y 2. hemos llegado a la conclusión modelarlo de otra manera:
> crear clases Persona, DatosCliente y DatosProveedor, y hacer que Persona
> tenga una referencia opcional a cada uno. Si una persona nos compra algo y
> no tiene parte de cliente, esta es creada y asociada. Preguntar si un
> persona es cliente coincide con mirar si tiene una parte de datos de
> cliente.
> 
> ¿Por qué me importa eso? Por el tema de la persistencia. El tema de dejar
> evolucionar dinámicamente a los objetos, me crea ciertos trastornos a la
> hora de las actualizaciones.
> 
> Saludos,
> Erny
> 
> 
> 
> 
> 
> 
> 
> 
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo.py/python-es






Más información sobre la lista de distribución Python-es