Ver Mensaje Individual
  #8 (permalink)  
Antiguo 20/03/2013, 03:38
chustuoso2013
 
Fecha de Ingreso: marzo-2013
Mensajes: 10
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Set/Get con properties no funciona, aparecen duplicados o algo raro los ca

Cita:
Iniciado por razpeitia Ver Mensaje
Si al menos corriste el programa te habrás dado cuenta que imprimir __dominio arroja un error, por que es una variable privada.

Entonces lo que estas haciendo estas encapsulando tu variable privada __dominio y la estas exponiendo al mundo por medio de la propiedad dominio.
Buenas sigo teniendo problemas, si el elemento a con el valor "Soy un dominio nuevo" lo intento sustituir en el diccionario por el valor antiguo, no se guarda y se mantiene al valor antiguo en esa variable con los __, si ejecuto el mismo codigo quitando los __ se ejecuta correctamente.

Código:
class Sujeto:
    def __init__(self, ip, dominios):
        self.__dominios = dominios
        self.__ip=ip
     
    def __str__(self):
        return "IP=>%s DOMINIOS=> %s" % (self.__ip, self.__dominios)
     
    @property
    def ip(self):
        return self.__ip
     
    @ip.setter
    def ip(self, valor):
        self.__ip = valor

    @property
    def dominios(self):
        return self.__dominios
     
    @dominios.setter
    def dominios(self, valor):
        self.__dominios = valor     
              
      
obj1 = Sujeto("192.13.12.11", "gmal.com:gmail.es:gmail.net")
            
diccionario = {}

diccionario[obj1.ip] = obj1

a = diccionario.get("192.13.12.11")

print a

a.dominios="Soy un dominio nuevo"

diccionario[a.ip] = a

b= diccionario.get("192.13.12.11")

print b
Imprime erroneamente
Cita:
IP=>192.13.12.11 DOMINIOS=> gmal.com:gmail.es:gmail.net
IP=>192.13.12.11 DOMINIOS=> gmal.com:gmail.es:gmail.net
Sin embargo, si hago exactamente el mismo codigo pero quitando los __ funciona como quiero y actualiza correctamente el diccionario

Código:
class Sujeto:
    def __init__(self, ip, dominios):
        self.dominios = dominios
        self.ip=ip
     
    def __str__(self):
        return "IP=>%s DOMINIOS=> %s" % (self.ip, self.dominios)
     
    @property
    def ip(self):
        return self.ip
     
    @ip.setter
    def ip(self, valor):
        self.ip = valor

    @property
    def dominios(self):
        return self.dominios
     
    @dominios.setter
    def dominios(self, valor):
        self.dominios = valor     
              
      
obj1 = Sujeto("192.13.12.11", "gmal.com:gmail.es:gmail.net")
            
diccionario = {}

diccionario[obj1.ip] = obj1

a = diccionario.get("192.13.12.11")

print a

a.dominios="Soy un dominio nuevo"

diccionario[a.ip] = a

b= diccionario.get("192.13.12.11")

print b
Imprime correctamente
Cita:
IP=>192.13.12.11 DOMINIOS=> gmal.com:gmail.es:gmail.net
IP=>192.13.12.11 DOMINIOS=> Soy un dominio nuevo