Article

Interfaz VS clases abstractas en Python

Published May 09, 2026 · 19 hours, 51 minutes ago

Gastón Gaitan
Gastón Gaitan
Backend Engineer · May 09, 2026
Interfaz VS clases abstractas en Python
Python · OOP · Arquitectura

Clases abstractas vs interfaces en Python

Mucha gente piensa que una interfaz y una clase abstracta son exactamente lo mismo. En Python técnicamente ambas usan el módulo abc, pero conceptualmente resuelven problemas distintos.

La gran duda

Si Python no tiene la keyword interface, entonces… ¿cómo se implementan las interfaces?

La diferencia real

La diferencia no está tanto en la sintaxis, sino en la intención del diseño.

Regla práctica

Clase abstracta → compartir lógica y estado.
Interfaz → definir capacidades o contratos.

Abstract Class

Qué es una clase abstracta

Base parcialmente implementada

Una clase abstracta sirve para crear una base común entre varias clases. Puede tener:

  • Atributos
  • Estado
  • Métodos implementados
  • Métodos obligatorios
  • Lógica compartida
abstract_class.py

Clase abstracta con estado y comportamiento

Comparte atributos, lógica y obliga a implementar ciertos métodos.

from abc import ABC, abstractmethod


class Vehiculo(ABC):

    def __init__(self, velocidad):
        self.velocidad = velocidad

    def acelerar(self):
        self.velocidad += 10

    @abstractmethod
    def mover(self):
        pass
Idea clave: una clase abstracta mezcla contrato + implementación compartida.
Interface

Cómo se simula una interfaz en Python

Solo contrato

Python no tiene interfaces reales como Java o C#. Entonces normalmente se usan clases abstractas que solamente contienen métodos abstractos.

interface.py

Interfaz simulada

No guarda estado ni lógica. Solo define comportamiento esperado.

from abc import ABC, abstractmethod


class Volador(ABC):

    @abstractmethod
    def volar(self):
        pass
La interfaz no dice cómo hacerlo. Solo obliga a que exista ese comportamiento.
Estado

Qué significa "estado" de una clase

Datos internos

El estado son los datos que vive guardando el objeto internamente.

state.py

Clase con estado

El objeto mantiene datos internos que pueden cambiar.

class CuentaBancaria:

    def __init__(self, saldo):
        self.saldo = saldo

    def depositar(self, monto):
        self.saldo += monto
Las interfaces idealmente no mantienen estado. Solo representan capacidades.
Multiple

Interfaces y herencia múltiple

Composición de capacidades

Uno de los objetivos principales de las interfaces es permitir combinar múltiples capacidades en una misma clase.

multiple_interfaces.py

Múltiples interfaces

Un objeto puede implementar muchas capacidades distintas.

class Volador(ABC):

    @abstractmethod
    def volar(self):
        pass


class Nadador(ABC):

    @abstractmethod
    def nadar(self):
        pass


class Pato(Volador, Nadador):

    def volar(self):
        print("Volando")

    def nadar(self):
        print("Nadando")
La idea: en vez de crear jerarquías gigantes, componés capacidades independientes.
Comparación

Clase abstracta vs interfaz

Diferencia conceptual

Clase abstracta

  • Tiene estado
  • Tiene lógica compartida
  • Puede tener métodos implementados
  • Representa relación fuerte ("es un")
  • Comparte estructura común
  • Sirve como base real

Interfaz

  • No suele tener estado
  • No comparte lógica pesada
  • Solo define contratos
  • Representa capacidades ("puede hacer")
  • Permite composición
  • Ideal para herencia múltiple

Entonces cuál sería la conclusión correcta

  • Abstract Comparte estado, lógica y comportamiento común.
  • Interface Define capacidades y contratos esperados.
  • Python No tiene interfaces reales. Se simulan usando clases abstractas.
  • Diseño La diferencia más importante es conceptual, no sintáctica.
  • Clave Clase abstracta = “es un”. Interfaz = “puede hacer”.