Encapsulación con Python

La encapsulación con Python consiste en hacer inaccesibles desde fuera los atributos y métodos que necesitemos de una clase determinada para proteger la integridad del objeto.

Encapsulando atributos y métodos en Python

Para encapsular utilizaremos doble guión bajo __ seguido del nombre de la variable o método. Python internamente cambiará el nombre para que esté inaccesible. Para desencapsular, llamaremos a la función get seguido del nombre de la variable.

Encapsulando una propiedad con Python

Para encapsular la variable secreto agregaremos doble guión bajo delante __secreto. Al intentar acceder acceder a la propiedad de nuestro objeto como hacemos siempre, veremos que recibimos un error.

class Consolas:
    def __init__(self):
        self.__secreto = 123456789

mi_consola = Consolas()
print(mi_consola.__secreto)
# AttributeError: 'Consolas' object has no attribute '__secreto'

Ahora crearemos una función que comience por la palabra get seguida del nombre de la propiedad que tenemos encapsulada, y el nombre quedará de la siguiente forma get__secreto(). Este método lo único que hace es retornar el valor desencapsulado.

class Consolas:
    def __init__(self):
        self.__secreto = 123456789

    def get__secreto(self):
        return self.__secreto

mi_consola = Consolas()
print(mi_consola.get__secreto())
# 123456789

Encapsulando un método con Python

A continuación vamos a encapsular un método de una clase.

Para encapsular un método, utilizaremos el doble guión bajo __ seguido del nombre del método, como hicimos con los atributos anteriormente. Si intentamos acceder al método sin haber desencapsulado, obtendremos un error.

class Consolas:
    def __init__(self):
        self.__secreto = 123456789
    
    def __metodo_secreto(self):
        return f'Esta información es secreta'

mi_consola = Consolas()
print(mi_consola.__metodo_secreto())

# AttributeError: 'Consolas' object has no attribute '__metodo_secreto'

Necesitamos desencapsular nuestro método para poder acceder a él desde fuera. La forma de hacerlo es muy sencilla: únicamente debemos colocar delante de la llamada al método un guión bajo seguido del nombre de la clase: _clase__metodo.

class Consolas:
    def __init__(self):
        self.__secreto = 123456789
    
    def __metodo_secreto(self):
        return f'Esta información es secreta'

mi_consola = Consolas()
print(mi_consola._Consolas__metodo_secreto())

# Esta información es secreta

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *