Open In Colab

1.8. Encapsulamiento#

El encapsulamiento en Python es un principio de la programación orientada a objetos que consiste en ocultar los detalles de implementación de una clase y exponer solo una interfaz pública para interactuar con los objetos de esa clase. Esto se logra definiendo atributos y métodos como públicos, privados o protegidos.

Descripción de la imagen

1.8.1. Niveles de Encapsulamiento:#

Atributos y Métodos Públicos: Son accesibles desde cualquier parte del programa. Se definen sin ningún prefijo especial.

class Persona:
    def __init__(self, nombre):
        self.nombre = nombre
    
    def saludar(self):
        return f"Hola, soy {self.nombre}."

Atributos y Métodos Privados: Son accesibles solo desde dentro de la clase que los define. Se definen con un prefijo de doble guion bajo (__).

class Persona:
    def __init__(self, nombre):
        self.__nombre = nombre
    
    def __saludar(self):
        return f"Hola, soy {self.__nombre}."

Atributos y Métodos Protegidos: Son accesibles desde dentro de la clase que los define y desde las clases que heredan de ella. Se definen con un prefijo de un solo guion bajo (_).

class Persona:
    def __init__(self, nombre):
        self._nombre = nombre
    
    def _saludar(self):
        return f"Hola, soy {self._nombre}."

1.8.2. Uso de Encapsulamiento#

El encapsulamiento permite ocultar la implementación interna de una clase y proporcionar una interfaz clara y bien definida para interactuar con los objetos de esa clase. Esto promueve la modularidad, la seguridad y el mantenimiento del código.

class Persona:
    def __init__(self, nombre):
        self.__nombre = nombre
    
    def saludar(self):
        return f"Hola, soy {self.__nombre}."

# Crear un objeto de la clase Persona
persona = Persona("Juan")
# Acceder a un atributo público
print(persona.nombre)  # Error: AttributeError: 'Persona' object has no attribute 'nombre'
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In[5], line 2
      1 # Acceder a un atributo público
----> 2 print(persona.nombre)  # Error: AttributeError: 'Persona' object has no attribute 'nombre'

AttributeError: 'Persona' object has no attribute 'nombre'
# Acceder a un atributo privado
print(persona.__nombre)  # Error: AttributeError: 'Persona' object has no attribute '__nombre'
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In[6], line 2
      1 # Acceder a un atributo privado
----> 2 print(persona.__nombre)  # Error: AttributeError: 'Persona' object has no attribute '__nombre'

AttributeError: 'Persona' object has no attribute '__nombre'
# Acceder a un método público
print(persona.saludar())  # Salida: Hola, soy Juan
Hola, soy Juan.

En este ejemplo, el atributo nombre es privado y solo se puede acceder a él desde dentro de la clase Persona. El método saludar() es público y proporciona una forma segura de interactuar con el objeto persona sin exponer su implementación interna.

En resumen, el encapsulamiento en Python permite controlar el acceso a los atributos y métodos de una clase y promueve una interfaz clara y segura para interactuar con los objetos de esa clase. Esto ayuda a mejorar la modularidad, la seguridad y el mantenimiento del código.