¿Qué es una Clase?
Las clases son modelos del mundo real que capturan la estructura y comportamiento compartidos por una colección de objetos del mismo tipo. La clase es como una plantilla de los objetos.
Analogía: El Diseño de un Coche
Antes de construir un coche, necesitas un plan o diseño que indique qué piezas necesita (ruedas, motor, asientos) y cómo deben funcionar juntas. En programación, una clase es exactamente ese plan: un molde que define las características (atributos) y acciones (métodos) que tendrán los objetos creados a partir de ella.
Definición de una Clase en Python
Se usa la palabra reservada class, seguida del nombre en
PascalCase. Los atributos definidos directamente dentro del cuerpo de
la clase (fuera del __init__) son atributos de clase y son
compartidos por todos los objetos.
class Estudiante:
# Atributos de clase: compartidos por TODAS las instancias
nombre = "Sin nombre"
apellido = "Sin apellido"
edad = 0
# En Python la indentación define el bloque de la clase
# No se usan llaves como en Java o C++
Anatomía de una Clase
Palabra reservada
PascalCase
Herencia (opcional)
Delimita el cuerpo
¿Qué es un Objeto?
Siguiendo la analogía del coche, una vez que tienes el diseño, puedes usarlo para construir un coche real. Ese coche construido es un objeto. Puedes fabricar muchos coches con el mismo diseño, y cada uno será un objeto distinto, pero todos basados en el mismo plan.
En programación, un objeto es una instancia de una clase. Es el "ejemplar" real que puedes usar en tu programa. Cada objeto tiene sus propios valores para las características definidas en la clase.
Creación de Objetos en Python
Para crear un objeto, se llama a la clase como si fuera una función. Esto crea una nueva instancia de esa clase:
class Estudiante:
nombre = "Sin nombre"
apellido = "Sin apellido"
edad = 0
# Crear objetos (instancias) de la clase Estudiante
estudiante1 = Estudiante() # Objeto 1
estudiante2 = Estudiante() # Objeto 2
estudiante3 = Estudiante() # Objeto 3
# Todos comparten los atributos de clase, pero son instancias separadas
print(estudiante1.nombre) # Sin nombre
print(estudiante2.apellido) # Sin apellido
Atributos
Los atributos son las características o propiedades que definen el estado de un objeto. Un atributo almacena información que pertenece a una clase o a un objeto en particular. Existen dos tipos:
Atributos de Clase
Pertenecen a la clase en sí, no a instancias individuales. Todos los objetos de esa clase comparten el mismo valor.
class Estudiante:
# Atributo de clase
institucion = "UNIAMERICANA"
Atributos de Instancia
Pertenecen a una instancia específica. Cada objeto puede tener valores diferentes para estos atributos.
def __init__(self, nombre):
# Atributo de instancia
self.nombre = nombre
El Constructor __init__
__init__ es un método especial que se llama
automáticamente cuando se crea un nuevo objeto de una clase. Su propósito principal
es inicializar los atributos del objeto, dándole los valores
iniciales que debe tener.
__init__
Nombre del método constructor
def
Palabra clave para definir método
self
Referencia al objeto actual
Parámetros
Valores para inicializar atributos
class Estudiante:
# Atributo de clase
institucion = "UNIGUAJIRA"
# Constructor: se ejecuta al crear cada nuevo objeto
def __init__(self, nombre, apellido, edad):
# Atributos de instancia (únicos para cada objeto)
self.nombre = nombre
self.apellido = apellido
self.edad = edad
# Crear objetos proporcionando valores en el constructor
estudiante1 = Estudiante("Ana", "García", 20)
estudiante2 = Estudiante("Luis", "Pérez", 22)
# Acceder a los atributos del objeto
print(estudiante1.nombre) # Ana
print(estudiante2.edad) # 22
print(estudiante1.institucion) # UNIGUAJIRA (atributo de clase)
Métodos
Un método es una función definida dentro de una clase. Los métodos son utilizados para realizar operaciones con los datos de los objetos o para modificar esos datos. En términos simples, los métodos permiten que los objetos "hagan cosas" o "realicen acciones".
self como
primer parámetro, que es la referencia al objeto que los está ejecutando.
class Estudiante:
def __init__(self, nombre, apellido, edad):
self.nombre = nombre
self.apellido = apellido
self.edad = edad
# Método: permite al objeto "hacer algo"
def presentarse(self):
# f-string: inserta el valor del atributo dentro del texto
return f"Hola, soy {self.nombre} {self.apellido} y tengo {self.edad} años."
def cumplir_anos(self):
self.edad += 1 # Modifica el atributo del objeto
print(f"¡Feliz cumpleaños {self.nombre}! Ahora tienes {self.edad} años.")
# Crear objeto
estudiante1 = Estudiante("Ana", "García", 20)
# Ejecutar métodos del objeto
print(estudiante1.presentarse()) # Hola, soy Ana García y tengo 20 años.
estudiante1.cumplir_anos() # ¡Feliz cumpleaños Ana! Ahora tienes 21 años.
Ejemplo Completo
Combinando todo lo aprendido: clase, atributos de clase e instancia, constructor y métodos:
class Persona:
"""Clase que modela una persona en el sistema."""
# Atributo de clase
especie = "Homo sapiens"
def __init__(self, nombre, edad, altura):
# Atributos de instancia
self.nombre = nombre
self.edad = edad
self.altura = altura
def caminar(self):
return f"{self.nombre} está caminando."
def hablar(self, mensaje):
return f"{self.nombre} dice: '{mensaje}'"
def __str__(self):
"""Representación legible del objeto."""
return f"Persona(nombre={self.nombre}, edad={self.edad})"
# Crear dos personas con diferentes valores
p1 = Persona("Carlos", 25, 1.80)
p2 = Persona("María", 30, 1.65)
print(p1.caminar()) # Carlos está caminando.
print(p2.hablar("¡Hola!")) # María dice: '¡Hola!'
print(p1.especie) # Homo sapiens
print(p1) # Persona(nombre=Carlos, edad=25)
Resumen de Conceptos
| Concepto | Qué es | Ejemplo |
|---|---|---|
| Clase | Plantilla / molde para crear objetos | class Coche: |
| Objeto | Instancia concreta de una clase | mi_coche = Coche() |
| Atributo de clase | Variable compartida por todos los objetos | ruedas = 4 |
| Atributo de instancia | Variable única para cada objeto | self.color = "Rojo" |
__init__ |
Constructor: inicializa los atributos | def __init__(self, color): |
| Método | Función dentro de una clase | def arrancar(self): |
self |
Referencia al objeto actual | self.color = "Azul" |
Bibliografía
- Joyanes Aguilar, L. (2008). Fundamentos de Programación, 4ta Edición. McGraw-Hill.
- Phillips, D. (2018). Python 3 Object-Oriented Programming, 3rd Ed. Packt Publishing.
- Documentación oficial de Python. Classes — Python Docs.