Python vs Java C C++

Ernesto Revilla aerd en retemail.es
Jue Mar 18 00:02:59 CET 2004


Hola

pues me parece extraordinariamente interesante, lo de "P1.__dict__.update(P2.__dict__)" 

Quizá es lo que necesito. Todo esto lo necesito para mi servidor de aplicaciones, como he dicho, que cuando haya una pila de personas conectadas y tengo que corregir código (normalmente para 1 ó 2 personas) no tenga que echar todo el mundo y reiniciar el servidor de aplicaciones.

Pronto lo probaré!

Muchas gracias,
Erny


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