[Python-es]Re: Subject: Re: [Python-es] Re: [Python-es]Re: [Python-es]Evolución dinámica de los objetos a diferentes clases

Marcos Sánchez Provencio rapto en arrakis.es
Sab Ago 24 11:41:56 CEST 2002


Yo creo que debería haber (no sé si hay PEPs de esto) un método especial
__cast__ que haría los cambios necesarios. Por supuesto, este método
recogería toda la información necesaria para que la nueva clase se
comportara como se espera. Por ejemplo, en una jerarquía

Persona
\--Cliente

Donde el único atributo nuevo del cliente es un id_cliente habría que
hacer un cast

unaPersona=Persona()
nuevoCliente=Cliente.__cast__(unaPersona, id_cliente=2323)

Ahora veo que no puede ser un método, sino una función estática de la
clase. Código para Python 2.2 sin verificar:

class Cliente:
  def __cast__(objetoBase, **kw):
    if type(objetoBase)==TipoPersona:
      objetoBase.__class__=Cliente
      objetoBase.id_cliente=kw['id_cliente']
    else:
      raise NotImplemented
  __cast__=classmethod(__cast__)

De momento habría que llamarlo a pelo, pero quedaría más mono con

Cliente[unaPersona, id_cliente=2323] 

Parecido a crear una nueva instancia,, pero diferente, o soluciones
similares. ¿Un voluntario para sacar un parche para la 2.3? ¿Se puede
redefinir __lsub__ para que haga eso?

El vie, 23-08-2002 a las 19:53, Ernesto Revilla escribió:
> Hola,
> 
> sí es algo un tanto nuevo.
> Lo que no tengo claro es que si tiene que ejecutarse o no el __init__ del
> nuevo tipo.
> 
> Pienso que estas transformaciones deberían estar contempladas en el sentido
> que si cambiamos la base debería de correr algún método de
> __convertFrom__(self) que permitiese o no la conversión y que pudiese
> realizar tareas especiales.
> 
> Erny
> 
> 
> ----- Original Message -----
> From: "rapto" <rapto en arrakis.es>
> To: <python-es en aditel.org>
> Sent: Friday, August 23, 2002 10:12 AM
> Subject: [Python-es]Re: [Python-es]Evolución dinámica de los objetos a
> diferentes clases
> 
> 
> > Bueno, más sencillo y legible, imposible. No me parece una filigrana
> > técnica, tampoco. Si me hablas de que es una locura cambiar de clase un
> > objeto, lo que es 'ilegible' es el diseño de la aplicación, no la
> > solución técnica. En Python, que un objeto sea de una clase u otra no
> > debe depender más que de su atributo __class__, lo que es bastante
> > pitónico. De todos modos, entiendo que la migración de clase será entre
> > clases similares, de 'apunte no contabilizado' a 'apunte
> > contaabilizado' y cosas así.
> >
> > En resumidas cuentas, me parece como el asunto de la declaración de
> > tipos (un poco a lo bestia, eso lo admito, pero debe ser porque me
> > quedan prejuicios de cuando programaba en VB).
> >
> > Saludos
> >
> > ----- Mensaje Original -----
> > Remitente: Antoni Aloy López <aloy en ctv.es>
> > Fecha: Jueves, Agosto 22, 2002 9:46 pm
> > Asunto: Re: [Python-es]Evolución dinámica de los objetos a diferentes
> > clases
> >
> > > El Jue 22 Ago 2002 21:14, Marcos Sánchez Provencio escrigué:
> > > > 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()
> > > >
> > >
> > > Muy bonito, e imposible de mantener :(
> > >
> > > Depende mucho de tu aplicación, pero yo estoy por hacer algo menos
> > > genérico y
> > > más sencillo de leer/depurar/modificar, que al fin y al cabo
> > > representa un
> > > 80% del ciclo de vida de un programa.
> > >
> > > Tanto la clase cliente como proveedor pueden heredar directamente
> > > de persona,
> > > la clase básica. La persistencia se podría sobreescribir cada vez,
> > > o
> > > separarla en varios procedimientos para poder reaprovechar mejor
> > > el código.
> > >
> > > Seguir la norma KISS suele ser lo mejor en estos casos, puedes
> > > encontrar
> > > soluciones técnicamente espectaculares, pero la simplicidad del
> > > código es una
> > > virtud en sí misma.
> > > --
> > >
> > > Antoni Aloy López
> > > Binissalem - Mallorca
> > > Linux Registered User # 210825
> > > Gentoo Powered
> > >
> > > _______________________________________________
> > > Python-es mailing list
> > > Python-es en aditel.org
> > > http://listas.aditel.org/listinfo.py/python-es
> > >
> >
> > _______________________________________________
> > Python-es mailing list
> > Python-es en aditel.org
> > http://listas.aditel.org/listinfo.py/python-es
> 
> 
> _______________________________________________
> 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