Python vs Java C C++

Chema Cortes py en ch3m4.org
Mie Mar 17 19:40:48 CET 2004


Ernesto Revilla escribió:

> 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.

El problema que cuentas se debe a que las clases no se "redefinen", se 
"suplantan". Al redefinir una clase, lo que haces en realidad es crear 
una nueva clase que tiene el mismo nombre. El objeto aún conserva la 
referencia de la clase con la que fue creada, que habría que actualizar 
con la "transmutación" que tanto dice Marcos.

Pero hay otra solución. Mira este ejemplo, por si te sirve de algo:

class P1:
   def info(self):
     print "Instancia de P1"

p=P()
p.info() # --> "Instancia de P1"

class P2:
   def info(self):
      print "Instancia de P2"
   def valor(self,val=10):
      self.dato=val

### Some kind of magic
P1.__dict__.update(P2.__dict__)
###

p.info()  #--> "Instancia de P2"
p.valor(100)
print p.dato  #--> 100


Y a partir de aquí puedes complicarlo todo lo que quieras, como utilizar 
las metaclases ó el atributo __new__ para construir una "factoría" de 
clases.




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