¿Qué es una clase?

¿Qué es una clase?

Una clase es como un "molde" o "plantilla" que define las características y comportamientos de un objeto.

python
# Definición básica de una clase
class Perro:
    pass

Atributos y Métodos

Atributos (características)

python
class Perro:
    # Atributo de clase (compartido por todas las instancias)
    especie = "Canis lupus familiaris"
    
    def __init__(self, nombre, edad):
        # Atributos de instancia (únicos para cada objeto)
        self.nombre = nombre
        self.edad = edad

Métodos (comportamientos)

python
class Perro:
    def __init__(self, nombre, edad):
        self.nombre = nombre
        self.edad = edad
    
    # Método de instancia
    def ladrar(self):
        return f"{self.nombre} dice: ¡Guau!"
    
    def cumplir_anios(self):
        self.edad += 1
        return f"{self.nombre} ahora tiene {self.edad} años"

Creando objetos (instancias)

python
# Crear instancias de la clase Perro
mi_perro = Perro("Rex", 3)
tu_perro = Perro("Luna", 2)

print(mi_perro.nombre)  # Output: Rex
print(tu_perro.edad)    # Output: 2
print(mi_perro.ladrar()) # Output: Rex dice: ¡Guau!

Herencia

python
# Clase padre
class Animal:
    def __init__(self, nombre):
        self.nombre = nombre
    
    def hacer_sonido(self):
        return "Sonido genérico"

# Clase hija que hereda de Animal
class Gato(Animal):
    def hacer_sonido(self):
        return "¡Miau!"
    
    def ronronear(self):
        return "Purrrr..."

# Uso de la herencia
mi_gato = Gato("Whiskers")
print(mi_gato.hacer_sonido())  # Output: ¡Miau!
print(mi_gato.ronronear())     # Output: Purrrr...

Métodos especiales

python
class Persona:
    def __init__(self, nombre, edad):
        self.nombre = nombre
        self.edad = edad
    
    # Método especial para representación en string
    def __str__(self):
        return f"Persona: {self.nombre}, {self.edad} años"
    
    # Método especial para comparación
    def __eq__(self, otro):
        return self.nombre == otro.nombre and self.edad == otro.edad

persona1 = Persona("Ana", 25)
persona2 = Persona("Ana", 25)

print(persona1)  # Output: Persona: Ana, 25 años
print(persona1 == persona2)  # Output: True

Encapsulación

python
class CuentaBancaria:
    def __init__(self, titular, saldo_inicial=0):
        self.titular = titular
        self.__saldo = saldo_inicial  # Atributo privado
    
    # Getter
    def get_saldo(self):
        return self.__saldo
    
    # Setter con validación
    def depositar(self, cantidad):
        if cantidad > 0:
            self.__saldo += cantidad
            return True
        return False
    
    def retirar(self, cantidad):
        if 0 < cantidad <= self.__saldo:
            self.__saldo -= cantidad
            return True
        return False

cuenta = CuentaBancaria("Juan", 1000)
cuenta.depositar(500)
print(cuenta.get_saldo())  # Output: 1500

Ejemplo completo y práctico

python
class Libro:
    def __init__(self, titulo, autor, paginas):
        self.titulo = titulo
        self.autor = autor
        self.paginas = paginas
        self.leido = False
    
    def leer(self):
        self.leido = True
        return f"Has leído '{self.titulo}'"
    
    def info(self):
        estado = "leído" if self.leido else "por leer"
        return f"'{self.titulo}' por {self.autor} - {self.paginas} páginas ({estado})"

# Crear objetos
libro1 = Libro("Cien años de soledad", "García Márquez", 417)
libro2 = Libro("1984", "George Orwell", 328)

print(libro1.info())  # Output: 'Cien años de soledad' por García Márquez - 417 páginas (por leer)
libro1.leer()
print(libro1.info())  # Output: ... (leído)

Ventajas de usar clases:

  1. Organización: Código más estructurado y mantenible

  2. Reutilización: Puedes crear múltiples objetos de la misma clase

  3. Modularidad: Cada clase tiene una responsabilidad específica

  4. Abstracción: Ocultas la complejidad interna

¿Te gustaría que profundice en algún aspecto específico de las clases?

Comentarios

Entradas populares de este blog

¿Qué es un Closure?

4 tipos de colecciones de datos más

Calculadora de edad