¿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?

Calculadora de edad

Funciones en Python: con y sin paréntesis