Python vs Java C C++

Hernan Foffani hernan en orgmf.com.ar
Mie Mar 17 17:15:00 CET 2004


>>>     * la redefinición de una clase requiere, en general,
>>>     crear de nuevo los objetos que usan la clase.
>
>> Normalmente, se usan las clases como "plantillas" para crear a
>> partir de ellas los objetos. Existe otra técnica más dinámica en la
>> que unas clases "delegan" en otras la creación de los objetos
>> (mírate los ensayos sobre "metaclases").
>
> Me interesaba cambiar el código y que las instancias ya existentes
> tengan en cuenta las modificaciones del código, es decir,
> métodos modificados, nuevos métodos, métodos que ya
> no existen e incluso nuevos atributos de clase.

Aparte de CLOS, no conozco otro lenguaje (lo que no significa que
no haya) que provea un mecanismo para hacerlo mas o menos bien.
Ni siquiera DYLAN (y eso que se llama asi por DYnamic LANguage).

Para lo que quieres no alcanza con un rebinding de __class__.
Los atributos de una instancia pueden tener otro tipo para lo
que haría falta una conversion o peor aun otros objetos por lo
que el cambio debe ser recursivo.

Reinicializar la instancia implicaría que todos los objetos que son
atributos de la instancia serían creados nuevamente.  Si la
instancia en cuestion incluyera un atributo de tipo list,
reinicializar la instancia provocaría que los, digamos, 100 items
de la lista se liberen y se recreen nuevamente. Para eso
borra la instancia original y recreala nuevamente (solo *uno* mas
de los 100 que ya tenías)

De todas formas ¿Cómo evitarías las violaciones de contratos,
interfaces e invariantes?

Saludos,
-H.




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