Encapsulación con Python

La encapsulación con Python es hacer inaccesibles desde fuera los atributos y métodos que necesitemos de una clase determinada, de esta forma protegeremos 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. Si queremos desencapsular llamaremos a una función con el nombre get + el nombre de la variable.

Encapsulando una propiedad con Python

Encapsularemos la variable secreto agregando doble guión bajo delante → __secreto . Luego intentaremos 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, quedando el nombre 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

Ahora vamos a encapsular un método de una clase.

Para encapsular un método utilizaremos de la misma forma que para los atributos el doble guión bajo __ seguido del nombre del método. 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 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 *