Una clase abstracta es una clase que no se puede instanciar directamente. Su propósito principal es ser heredada por otras clases que implementan los métodos definidos como abstractos en la clase base.
En Python, las clases abstractas se implementan utilizando el módulo abc
(Abstract Base Classes). Este módulo proporciona herramientas para definir clases y métodos abstractos.
from abc import ABC, abstractmethod
Definiendo una Clase Abstracta
Para definir una clase abstracta, se debe heredar de ABC
y utilizar el decorador @abstractmethod
para marcar los métodos que deben ser implementados por las subclases.
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def hacer_sonido(self):
pass
def dormir(self):
print("El animal está durmiendo.")
En este ejemplo,
Animal
es una clase abstracta con un método abstractohacer_sonido
- Un método concreto
dormir
.
Implementando Clases Derivadas
Las clases que heredan de una clase abstracta deben implementar todos los métodos abstractos. Si una subclase no implementa un método abstracto, también se convierte en una clase abstracta y no se puede instanciar.
Veamos como implementar nuestra clase abstracta Animal
class Perro(Animal):
def hacer_sonido(self):
print("El perro ladra.")
class Gato(Animal):
def hacer_sonido(self):
print("El gato maúlla.")
En este ejemplo, Perro
y Gato
son subclases de Animal
que implementan el método abstracto hacer_sonido
.
Clases mixtas
Una clase abstracta puede tener tanto métodos abstractos como métodos concretos. Los métodos concretos proporcionan una implementación por defecto que puede ser heredada o sobrescrita por las subclases.
Vamos a verlo con un ejemplo,
class Vehiculo(ABC):
@abstractmethod
def conducir(self):
pass
def encender(self):
print("El vehículo está encendido.")
class Coche(Vehiculo):
def conducir(self):
print("El coche está conduciendo.")
class Moto(Vehiculo):
def conducir(self):
print("La moto está conduciendo.")
En este ejemplo,
Vehiculo
tiene un método abstractoconducir
y un método concretoencender
.- Las subclases
Coche
yMoto
implementanconducir
pero heredanencender
.