Clases y Objetos

El molde y el producto: cómo Python modela el mundo real.

Material de Apoyo

Consulta el documento de referencia de esta unidad.

Ver Diapositivas

¿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
class
Palabra reservada
NombreClase
PascalCase
( )
Herencia (opcional)
Indentación
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
Clave: Puedes crear tantos objetos como necesites a partir de una sola clase, igual que una fábrica produce muchos coches con el mismo molde.

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".

Al igual que el constructor, todos los métodos reciben 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.