Interfaces y Abstract Base Class (ABC)

Interfaces formales


Para proyectos más grandes o críticos, es preferible usar interfaces formales, definidas a través del módulo abc. Estas proporcionan una forma de forzar la implementación de métodos en las clases derivadas.

from abc import ABC, abstractmethod

class Mando(ABC):
    @abstractmethod
    def encender(self):
        pass

    @abstractmethod
    def cambiar_canal(self, canal):
        pass

    @abstractmethod
    def subir_volumen(self):
        pass

    @abstractmethod
    def bajar_volumen(self):
        pass
Con este enfoque:
  • No se pueden crear instancias de Mando directamente.
  • Cualquier clase que herede de Mando debe implementar todos los métodos abstractos, o se generará un error al intentar instanciarla.
class MandoSamsung(Mando):
    def encender(self):
        print("Samsung encendido")

    def cambiar_canal(self, canal):
        print(f"Samsung cambia a canal {canal}")

    def subir_volumen(self):
        print("Samsung subiendo volumen")

    def bajar_volumen(self):
        print("Samsung bajando volumen")

# Esto funciona:
control = MandoSamsung()
control.encender()