Volver a la lista

Clases y herencia en Python

Aprenda qué es una clase en Python, para qué se utiliza y cómo funciona la herencia mediante ejemplos prácticos.

Intermedio
|
10min
|
Verificado (2026-07)
claseherenciaorientación a objetosOOPselfmétodo
Progreso0/18 (0%)

Clases y herencia en Python

Al finalizar este tema

Comprenderá qué son las clases, por qué son necesarias, cómo definir una clase para crear objetos y cómo reutilizar código mediante la herencia.


Cuándo es necesario usar clases

Supongamos que desea administrar datos de estudiantes. También podría hacerlo con diccionarios.

python
student1 = {"name": "Kim Hun", "score": 90}
student2 = {"name": "Lee Su", "score": 85}
def get_grade(student):
if student["score"] >= 90:
return "A"
elif student["score"] >= 80:
return "B"
return "C"

El problema surge cuando la escala aumenta. Al añadir funcionalidades como "control de asistencia", "modificar calificaciones" o "agregar materias" para el estudiante, las funciones se dispersan, obligando a buscar constantemente "¿dónde está el código relacionado con el estudiante?".

Las clases agrupan datos (atributos) y funciones (métodos) en una sola unidad.


Definición de clases e instanciación

python
class Student:
def __init__(self, name, score):
self.name = name # atributo de instancia
self.score = score
def grade(self):
if self.score >= 90:
return "A"
elif self.score >= 80:
return "B"
return "C"
def introduce(self):
return f"{self.name} (grado {self.grade()})"
python
# Creación de instancias
s1 = Student("Kim Hun", 90)
s2 = Student("Lee Su", 85)
print(s1.introduce()) # Kim Hun (grado A)
print(s2.grade()) # B
s2.score = 92 # modificación de puntuación
print(s2.grade()) # A
  • __init__ es el constructor: se invoca automáticamente cuando se crea una instancia.
  • self es self: es el medio para acceder a los atributos de esta instancia.
  • Cuando se llama a Student("Kim Hun", 90), se ejecuta __init__(self, "Kim Hun", 90).

¿Por qué usar clases?

La misma funcionalidad se puede implementar utilizando funciones y diccionarios. El verdadero valor de las clases reside en reunir en un solo lugar "lo que se puede hacer con estos datos".

python
# Enfoque funcional: datos y funciones separados
student = {"name": "Kim Hoon", "scores": []}
add_score(student, 90)
get_average(student)
get_grade(student)
# Enfoque orientado a objetos: datos y funciones integrados
student = Student("Kim Hoon")
student.add_score(90)
student.average()
student.grade()

Al escribir student., el IDE muestra una lista de "lo que se puede hacer con este objeto". El propio código sirve como documentación.


Herencia: heredar código común

Tanto "estudiante" como "profesor" tienen "nombre" y "afiliación". Coloca la parte común en la clase padre y añade solo las diferencias en las clases derivadas.

python
class Person:
def __init__(self, name, department):
self.name = name
self.department = department
def introduce(self):
return f"{self.name} ({self.department})"
class Student(Person):
def __init__(self, name, department, student_id):
super().__init__(name, department) # Llamada al constructor padre
self.student_id = student_id
def introduce(self):
return f"Estudiante {self.name} ({self.student_id})"
class Professor(Person):
def __init__(self, name, department, lab):
super().__init__(name, department)
self.lab = lab
def introduce(self):
return f"Profesor {self.name} (Laboratorio de {self.lab})"
python
s = Student("Kim Hoon", "Ciencias de la Vida", "2024-001")
p = Professor("Park Jin", "Ciencias de la Vida", "Genómica")
print(s.introduce()) # Estudiante Kim Hoon (2024-001)
print(p.introduce()) # Profesor Park Jin (Laboratorio de Genómica)
print(s.department) # Ciencias de la Vida — Propiedad heredada de Person
  • Se llama al constructor de la clase padre mediante super().__init__().
  • Si se define un método con el mismo nombre en la clase hija, este se sobrescribe (redefine).
  • department está definido en Person, pero puede ser utilizado tanto por Student como por Professor.

Resumen clave

ConceptoSignificado
ClaseUn plano que agrupa datos (atributos) y funcionalidad (métodos)
InstanciaUn objeto real creado a partir del plano (s1 = Student(...))
__init__Constructor: se ejecuta automáticamente al crear una instancia
selfHace referencia a la propia instancia actual
HerenciaLa clase hija hereda los atributos y métodos de la clase padre
super()Llama al método de la clase padre
Sobrescritura (Override)La clase hija redefine el método de la clase padre

No existe una regla que obligue a "usar siempre" clases. En scripts pequeños, las funciones y los diccionarios son suficientes. Sin embargo, cuando el código crece y es necesario manejar múltiples datos con la misma estructura, las clases son la herramienta más probada para organizar el código.


💬 Preguntas y comentarios

0 comentarios

Puedes publicar sin iniciar sesión. Los comentarios de invitados no pueden editarse ni eliminarse después.

0/2000

Cargando...