[Python-es] Problema con una variable.

Chema Cortes pych3m4 en gmail.com
Jue Sep 6 10:47:30 CEST 2012


El día 5 de septiembre de 2012 18:23, kausdiv <kausdiv en gmail.com> escribió:
>
> El 05/09/2012 16:51, Oscar Carballal escribió:
>
> Tienes que reemplazar la copia de la variable global antes de modificar su
> valor:
>
> ej:
>
>
>     def __init__(self):
>         global __conectado
>         __conectado = False
>
> Por otra parte espero que tengas un buen motivo para usar la declaración
> 'global' en python, ya que (espero que nadie se me tire encima) declarar
> globales en python es un poco absurdo:
> http://stackoverflow.com/questions/146557/do-you-use-the-global-statement-in-python
>
> Un saludo,
> Oscar Carballal
>
>
> Pues el motivo es muy simple "Desconocimiento". Yo hacía lo de __conectado =
> False en __init__ y despues en otro procedimiento no reconocía __conectado.
> :-(
>
> En fin tengo que estudiar más.
> llevo unos días.

Los atributos con doble subrayado son una especie de atributo privado,
aunque no existe tal concepto en python. Para conseguir que se
parezca, realiza un truco consistente en renombrar el atributo
añadiendo el nombre de la clase ("name mangling").

Lo que para las instancias de la clase se ve como  '__conectado', en
realidad tiene un nombre como '_Telefono__conectado'.

Evita las variables globales. El uso correcto de los atributos
privados sería a través de la instancia:

class Telefono():

    def __init__(self):
        self.__conectado = False

    def prueba(self):
        if self.__conectado != True:
            print "ok conectado"
        else:
            print "NO conectado"



-- 
Hyperreals *R: http://ch3m4.org/blog
Quarks, bits y otras criaturas infinitesimales


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