Protege y controla el acceso a los datos de tus objetos para una programación más robusta y segura.
El encapsulamiento es uno de los pilares de la Programación Orientada a Objetos. Consiste en ocultar los detalles internos de un objeto y exponer solo lo necesario. Así, protegemos los datos y evitamos que sean modificados accidentalmente desde fuera de la clase.
En Python, el acceso a los atributos se controla por convención usando guiones bajos:
self.nombre — Accesible desde cualquier parteself._nombre — Convención: solo debe usarse dentro de la clase y subclasesself.__nombre — No accesible directamente desde fuera de la clase (name mangling)class Persona:
def __init__(self, nombre, edad, dni):
self.nombre = nombre # Público
self._edad = edad # Protegido
self.__dni = dni # Privado
persona = Persona("Ana", 25, "12345678A")
# Acceso público
print(persona.nombre)
# Acceso protegido (no recomendado fuera de la clase)
print(persona._edad)
# Acceso privado (falla): print(persona.__dni)
# Acceso privado correcto:
print(persona._Persona__dni)
Para acceder o modificar atributos privados, se usan métodos especiales llamados getters y setters. En Python, se recomienda usar la función @property para una sintaxis más elegante.
class CuentaBancaria:
def __init__(self, saldo):
self.__saldo = saldo
@property
def saldo(self):
return self.__saldo
@saldo.setter
def saldo(self, valor):
if valor >= 0:
self.__saldo = valor
else:
print("El saldo no puede ser negativo")
cuenta = CuentaBancaria(1000)
print(cuenta.saldo)
cuenta.saldo = 500
print(cuenta.saldo)
cuenta.saldo = -100 # Muestra error
Las herramientas de IA pueden analizar tu código y sugerir mejoras en el uso de atributos privados, getters y setters, y detectar accesos indebidos a datos protegidos.
Crea una clase Producto con los siguientes atributos:
Implementa getters y setters para el precio, validando que nunca sea negativo. Crea un método para mostrar la información del producto.