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