CodeForge

Python de Cero a Experto / POO

Herencia: reutilizar y especializar

Teoría22 min20 XP

A menudo tienes clases que comparten mucho pero difieren en algo: un gasto normal y un gasto recurrente, un usuario y un administrador. La HERENCIA te deja crear una clase basada en otra: la clase hija HEREDA todo lo de la clase padre (atributos y métodos) y puede AÑADIR o CAMBIAR lo que necesite. Es reutilización al máximo: escribes lo común una vez en el padre, y cada hija solo agrega su diferencia. Hoy dominas la herencia.

El modelo base y sus versiones

Heredar de una clase

Una clase hija se declara con class Hija(Padre): y hereda todo lo del padre:

class GastoRecurrente(Gasto): hace que GastoRecurrente herede todo de Gasto. En su __init__, super().__init__(nombre, valor) llama al constructor del PADRE (para inicializar lo común), y luego agrega lo suyo (self.frecuencia). El método resumen está SOBRESCRITO: la hija define su propia versión, que además reutiliza la del padre con super().resumen(). Y isinstance(arriendo, Gasto) es True: un GastoRecurrente ES un Gasto —tiene todo lo del padre más lo suyo—.

super() y override

En class GastoRecurrente(Gasto), ¿qué hace super().__init__() y qué significa sobrescribir un método?

Mini-reto

Extiende Mi Bolsillo con herencia: 1) una clase padre Gasto con nombre, valor y un método resumen(); 2) una clase hija GastoConDescuento(Gasto) que agregue un descuento (porcentaje) en su __init__ (usando super().__init__) y sobrescriba resumen() para mostrar el valor con el descuento aplicado, reutilizando super().resumen(); 3) crea un gasto normal y uno con descuento, y muestra ambos resúmenes. Verifica con isinstance que el hijo ES un Gasto.

Qué sigue

Ya reutilizas y especializas con herencia. La próxima lección trae algo muy pythónico: los DUNDER METHODS (métodos "mágicos" como __str__, __eq__, __add__) que le enseñan a tus objetos a comportarse como los tipos nativos —imprimirse bien, compararse con ==, sumarse con +—. Es lo que hace que las clases de Python se sientan naturales.