PyWombat

Atributos privados?

Nuevo tip

Por convención, si queremos indicar que una variable sea "privada" haremos uso del guión bajo como prefijo.

_variable_privada = 'Acceso restringido'

Sin embargo, es probable que hayas notado que en ciertas ocasiones se utiliza un doble guión bajo (__) y quizás te estes preguntando ¿A qué se debe estos? Verás, la respuesta es muy sencilla. Al utilizar doble guión bajo, ya sea para una atributo o algún método, el interprete de Python re nombra al elemento para evitar colisiones con las subclases.

Aun que la idea original era esa, evitar colisiones, muchos desarrolladores (me incluyo) utilizamos el doble guión bajo (__) para prevenir accesos no autorizados en ciertos métodos y atributos.

class Demo:
    def __secret(self):
        print('Nadie puede saber!')

    def public(self):
        self.__secret()

class Child(Demo):
    def __secret(self):
        print('No puedo contarte!')

>>> demo = Demo()
>>> demo.__secret()     
AttributeError: 'Demo' object has no attribute '__secret'

>>> demo.public()
Nadie puede saber!

>>> child = Child() 
>>> child.public()
Nadie puede saber!

>>> dir(demo)  
['_Demo__secret_', 'public' .... ]