Herencia de programación orientada a objetos de Python: clases para padres e hijos

Aprenda la herencia en Python OOP. Domine las subclases, los métodos anulados, el uso de super() y múltiples patrones de herencia.

Pruébelo en el editor

Descripción general

La herencia es uno de los pilares fundamentales de la programación orientada a objetos (OOP). Es un mecanismo que permite que una nueva clase (conocida como hija o subclase) adopte los atributos y métodos de una clase existente (conocida como padre o superclase). Este patrón de diseño promueve la reutilización de código, reduce la redundancia y establece relaciones lógicas y jerárquicas entre los diferentes componentes de su aplicación.

Para implementar la herencia en Python, pasa el nombre de la clase principal entre paréntesis durante la definición de la clase secundaria: `class Child(Parent):`. La clase hija hereda inmediatamente todos los métodos y variables de la clase padre. Si el niño necesita un comportamiento personalizado, puede anular cualquier método principal redefiniéndolo con el mismo nombre. Dentro de un método anulado, aún puedes invocar la implementación principal usando la función incorporada `super()`, asegurando que puedas extender en lugar de reemplazar completamente la lógica existente.

A diferencia de muchos lenguajes de tipo estático, Python admite de forma nativa la herencia múltiple, lo que significa que una clase secundaria puede heredar de más de una clase principal (por ejemplo, `clase SmartDevice(Camera, Phone):`). Para resolver qué método principal se ejecuta cuando los nombres entran en conflicto, Python utiliza un algoritmo estricto llamado Orden de resolución del método (MRO). Comprender cómo estructurar árboles de herencia y utilizar super() es crucial para diseñar arquitecturas extensibles orientadas a objetos.

Código y salida de ejecución

Crear una clase de vehículo principal y una subclase de automóvil secundaria que anule la inicialización usando super().

class Vehicle:
    def __init__(self, brand, year):
        self.brand = brand
        self.year = year

    def display_info(self):
        return f"{self.year} {self.brand}"

class Car(Vehicle):
    def __init__(self, brand, year, model):
        # Call parent constructor
        super().__init__(brand, year)
        self.model = model

    def display_info(self):
        # Override parent method and extend it
        parent_info = super().display_info()
        return f"{parent_info} {self.model}"

my_car = Car("Ford", 2026, "Mustang")
print(my_car.display_info())
Salida terminal
2026 Ford Mustang

Implementación paso a paso

  • Crear clases de excepción personalizadas que heredan de Exception
  • Creación de componentes de interfaz de usuario (como botones) heredados de una vista genérica
  • Definición de modelos de bases de datos jerárquicos (por ejemplo, usuario, empleado, gerente)

Preguntas frecuentes

¿Qué hace super() en la subclasificación?

super() devuelve un objeto temporal de la clase principal, lo que le permite llamar a sus métodos, lo cual es particularmente útil para inicializar campos principales en __init__.

¿Se puede evitar que se herede una clase?

Python no admite una palabra clave "final" como Java para restringir la herencia. Convencionalmente, documentamos la intención de la clase o utilizamos verificadores de tipo con anotaciones @final del módulo de escritura.

Temas relacionados

Recursos recomendados de Python

Amplíe sus conocimientos con tutoriales interactivos relacionados, hojas de trucos y comparaciones de códigos.