Conceptos Básicos de Python: Programación Orientada a Objetos (OOP)
Introducción a la Herencia
Lesson 3 of 7 • 10 XP
Keep your place in this quest
Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.
Herencia es uno de los conceptos fundamentales de la Programación Orientada a Objetos (OOP).
Permite que una clase (llamada hija o subclase) herede los atributos y métodos de otra clase (llamada padre o superclase).
Esto significa que puedes definir comportamientos y datos comunes en una clase base, y luego crear clases más especializadas que reutilicen y personalicen esa funcionalidad — sin tener que reescribir el mismo código.
Sintaxis Básica para la Herencia
En Python, la herencia se implementa especificando el nombre de la clase padre entre paréntesis después del nombre de la clase hija.
class ParentClass:
# Atributos y métodos de la clase padre
class ChildClass(ParentClass):
# Atributos y métodos de la clase hija
````
Cuando una clase hija hereda de una clase padre, obtiene:
* Todos los **atributos** del padre (variables vinculadas al objeto)
* Todos los **métodos** del padre (funciones vinculadas al objeto)
* Cualquier **constructor** (`__init__`) que tenga la clase padre
---
# Ejemplo: Animales y Sonidos
Vamos a dar vida a la herencia con algo con lo que todos podemos relacionarnos — los animales.
Comenzaremos con una clase general `Animal` que define lo que todos los animales tienen en común, y luego crearemos tipos específicos de animales (`Dog` y `Cat`) que comparten esos rasgos pero emiten sonidos diferentes.
Aquí está la clase base:
```python
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
def sound(self):
pass # Dejamos que cada animal específico decida su propio sonido
````
La clase `Animal` tiene:
* Un método `__init__` que define el `name` y `age` para cada animal.
* Un método `sound()` que aún no hace nada (`pass` es solo un marcador de posición).
Lo reemplazaremos en cada tipo de animal con el sonido de esa especie.
---
Ahora creemos dos clases de animales específicas:
```python
class Dog(Animal):
def sound(self):
print("Woof woof!")
class Cat(Animal):
def sound(self):
print("Meow!")
Esto es lo que sucede:
- Tanto
DogcomoCatheredan deAnimal, por lo que obtienen automáticamente los atributosnameyagesin que tengamos que reescribir ese código. - Cada uno sobrescribe el método
sound()para producir su propio sonido único.
Creando y Usando los Objetos
dog = Dog("Rex", 2)
cat = Cat("Mimi", 3)
print(dog.name) # Rex
dog.sound() # Woof woof!
print(cat.name) # Mimi
cat.sound() # Meow!
Cuando creamos Dog("Rex", 2), esto pasa paso a paso:
- Python llama al método
__init__deAnimal(porqueDogno tiene uno propio). - Los valores de
nameyageque pasamos se almacenan en ese nuevo objeto. - Cuando llamamos a
dog.sound(), Python busca primero un métodosound()enDog. Encuentra el que escribimos ahí y lo ejecuta — imprimiendo"Woof woof!".
La misma lógica se aplica a Cat, pero encuentra y ejecuta su propio método sound().
Este ejemplo muestra la magia de la herencia:
- Escribimos la configuración común (
__init__) solo una vez, en la claseAnimal. - Cada subclase (
Dog,Cat) conserva las características compartidas y añade su comportamiento único. - El resultado es código menos repetitivo, lógica más organizada y una forma más fácil de gestionar objetos relacionados.
3. Cómo Funciona Esto
- Estructura compartida: El método
__init__deAnimalse ejecuta cuando creas un objetoDogoCat, porque lo heredan automáticamente. - Sobrescritura de métodos: Tanto
DogcomoCattienen sus propios métodossound()que reemplazan (sobrescriben) el marcador de posición enAnimal. Cuando llamas asound()en unDog, Python usa el definido enDog, no el deAnimal.
CONSEJO: Si una clase hija no sobrescribe un método, usa automáticamente el de la clase padre.
¿Por Qué Usar Herencia?
La herencia te permite:
- Evitar repetir código poniendo la lógica compartida en una única clase base.
- Hacer tu código más modular y legible.
- Construir clases especializadas a partir de un modelo general.
Ejemplo de pensamiento en herencia:
Animal→ modelo general conname,agey un métodosound().Dog→ tipo específico de animal con un sonido único.Cat→ otro tipo específico de animal con un sonido distinto.
Conclusión
La herencia es una herramienta poderosa en OOP para crear una jerarquía de clases, empezando con conceptos generales y avanzando hacia otros más especializados.
En Python, la implementas:
- Escribiendo una clase padre con atributos y métodos comunes.
- Creando clases hijas que listan el nombre de la clase padre entre paréntesis.
- Añadiendo o sobrescribiendo métodos en las clases hijas según sea necesario.
En la próxima lección, profundizaremos en este concepto explorando super() — una forma para que las clases hijas llamen y amplíen el comportamiento de sus clases padre.