Para definir una clase como abstracta en Python, debemos importar el módulo abc
(acrónimo abstract base classes). Después, haremos que nuestra clase abstracta herede de una clase ABC
que se incorpora en dicho módulo. Los métodos abstractos vendrán marcados con la anotación @abstractmethod
, y tendrán como única línea de código la instrucción pass
para dejar el código del método vacío, y delegar en las clases hija su implementación.
Veamos un ejemplo: supongamos que tenemos una clase abstracta Animal
para almacenar datos genéricos de un animal, como su nombre y su número de patas. Tendremos un constructor, y un método abstracto hablar
que se implementará en cada subclase que herede de dicha clase abstracta. Por ejemplo, crearemos una clase Perro
, que heredará de Animal
e implementará sus métodos abstractos, añadiendo características propias, como la raza del perro, u otros métodos.
from abc import ABC, abstractmethod
# Clase padre abstracta
class Animal:
nombre = ""
numeroPatas = 0
def __init__(self, nombre, patas):
self.nombre = nombre
self.numeroPatas = patas
# Método abstracto
@abstractmethod
def hablar(self):
pass
# Otros métodos
# Clase hija
class Perro(Animal):
raza = ""
def __init__(self, nombre, patas, raza):
super().__init__(nombre, patas)
self.raza = raza
# Implementamos métodos abstractos
def hablar(self):
print("Guau, guau")
# Otros métodos propios