Saltearse al contenido

Encapsulamiento y polimorfismo

En esta sección aprenderás dos conceptos clave de la programación orientada a objetos: encapsulamiento y polimorfismo. Ambos te ayudan a escribir código más seguro, flexible y reutilizable.


El encapsulamiento consiste en ocultar los detalles internos de un objeto y exponer solo lo necesario. Así, se protege el estado interno del objeto y se controla cómo se accede o modifica.

  • Los atributos y métodos “privados” se nombran con un guion bajo (_atributo o __atributo).
  • Se usan métodos llamados getters y setters para acceder o modificar atributos si es necesario.
Encapsulamiento con atributos privados
class CuentaBancaria:
    def __init__(self, saldo):
        self.__saldo = saldo # atributo privado
    def depositar(self, cantidad):
        if cantidad > 0:
            self.__saldo += cantidad
    def obtener_saldo(self):
        return self.__saldo
cuenta = CuentaBancaria(100)
cuenta.depositar(50)
print(cuenta.obtener_saldo()) # 150

En este ejemplo, el saldo solo puede modificarse mediante los métodos definidos, no directamente desde fuera de la clase.


El polimorfismo permite que diferentes clases compartan el mismo método (nombre), pero cada una tenga su propia implementación. Así, puedes usar objetos de distintas clases de manera intercambiable si cumplen con la misma interfaz.

Polimorfismo en acción
class Animal:
    def hablar(self):
        print('Hace un sonido')
class Perro(Animal):
    def hablar(self):
        print('¡Guau!')
class Gato(Animal):
    def hablar(self):
        print('¡Miau!')
animales = [Perro(), Gato()]
for animal in animales:
    animal.hablar()

Salida:

¡Guau!
¡Miau!

Cada objeto responde de manera diferente al mismo método hablar, dependiendo de su clase.


  • Encapsulamiento: protege los datos internos y controla el acceso a ellos.
  • Polimorfismo: permite usar diferentes objetos de manera uniforme si comparten métodos con el mismo nombre.
  • Ambos conceptos hacen tu código más seguro, flexible y fácil de mantener.

¿Listo para practicar? Intenta crear una clase con atributos privados y otra jerarquía de clases que usen polimorfismo.