Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Python intermedio para IA, Unidad 7 — Programación orientada a objetos para IA, 7.1 — Clases bien diseñadas ·

Métodos y atributos

Métodos y atributos: Claves para clases bien diseñadas

Introducción

En la programación orientada a objetos (POO), las clases son una herramienta esencial para organizar y reutilizar el código. Una clase bien diseñada no solo encapsula lógica relevante, sino que también facilita la mantenibilidad del software a largo plazo. Este artículo se centra en los métodos y atributos, dos componentes fundamentales de una clase. Aprenderemos cómo estructurarlos adecuadamente para mejorar la calidad de nuestro código.

Explicación principal con ejemplos

Métodos

Los métodos son funciones que pertenecen a una clase y operan sobre sus atributos. Su propósito es encapsular lógica específica del objeto. Aquí tienes un ejemplo sencillo:

class Calculadora:
    def __init__(self, num1, num2):
        self.num1 = num1
        self.num2 = num2

    def sumar(self):
        return self.num1 + self.num2
    
    def restar(self):
        return self.num1 - self.num2

En este ejemplo, sumar y restar son métodos que operan sobre los atributos num1 y num2. Estos métodos encapsulan la lógica de sumar y restar dos números.

Atributos

Los atributos son variables dentro de una clase que almacenan datos. Los atributos pueden ser públicos, protegidos o privados (definidos con _ o __). En Python, no hay modificadores de acceso como en otros lenguajes orientados a objetos, pero se sigue la convención.

class Persona:
    def __init__(self, nombre):
        self._nombre = nombre  # Atributo protegido

persona1 = Persona("Juan")
print(persona1._nombre)  # Acceso directo, aunque no recomendado

En este ejemplo, _nombre es un atributo protegido. El uso de _ sugiere que el atributo debería ser tratado con precaución.

Errores típicos / trampas

Trampa 1: Atributos y métodos públicos sin propósito

Asegúrate de que cada método tenga una función clara y que cada atributo almacene datos significativos. Un ejemplo de error sería:

class Persona:
    def __init__(self, nombre):
        self.nombre = nombre  # Atributo público

    def get_nombre(self):  # Método inútil
        return self.nombre

En este caso, el método get_nombre es innecesario porque se puede acceder directamente al atributo nombre.

Trampa 2: Usar métodos en lugar de atributos cuando no son necesarios

class Persona:
    def __init__(self, nombre):
        self.set_nombre(nombre)  # Método inútil

    def set_nombre(self, nuevo_nombre):  # Método innecesario
        self.nombre = nuevo_nombre

Aquí, set_nombre es una trampa porque se puede simplemente asignar el valor directamente al atributo.

Trampa 3: Olvidarse de inicializar los atributos

No olvides inicializar los atributos en el constructor (__init__). Esto puede causar errores silenciosos:

class Calculadora:
    def __init__(self):
        self.num1 = None  # Falta inicialización
    
    def sumar(self, num2):  # Lanza ValueError si num1 es None
        return self.num1 + num2

calculadora = Calculadora()
print(calculadora.sumar(5))  # Error: TypeError

Checklist accionable

  • Definir lógica adecuada: Cada método debe encapsular una lógica específica y significativa.
  • Minimizar métodos innecesarios: Evita el uso de métodos que puedan ser simplificados usando atributos directos.
  • Inicializar atributos en __init__: Asegúrate de inicializar todos los atributos en el constructor para evitar errores de tipo y valor.
  • Uso de _ y __: Utiliza _ para atributos protegidos y __ para privados (al though Python no tiene modificadores de acceso).
  • Documentar lógica: Comenta claramente la función de cada método y atributo.

Cierre

Siguientes pasos

  1. Práctica constante: Implementa clases simples y luego hazlas más complejas.
  2. Revisión crítica: Analiza las clases existentes para identificar métodos innecesarios o atributos redundantes.
  3. Documentación detallada: Agrega comentarios a cada método y atributo para explicar su función.
  4. Pruebas unitarias: Crea pruebas para asegurarte de que los métodos funcionan como esperas.

Siguiendo estos consejos, podrás crear clases más robustas y mantenibles en tus proyectos de inteligencia artificial y ciencia de datos.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).