CON · Concepto 8 · Programación orientada a objetos

37.Atributos y métodos

Los atributos son los datos que guarda cada objeto y los métodos son las acciones que puede realizar con esos datos.

¿Qué es?

Un objeto tiene dos partes:

  • Atributos: lo que el objeto es o tiene (sus datos). Un celular tiene marca, batería y saldo.
  • Métodos: lo que el objeto hace (funciones que viven dentro de la clase). Un celular llama, carga y recarga saldo.

Los métodos usan y cambian los atributos del mismo objeto: al cargar un celular, sube su batería, no la de otro.

Dos tipos de atributos

Tipo Dónde se define Se comparte Ejemplo
De instancia En __init__ con self. No, cada objeto tiene el suyo self.bateria
De clase Directamente dentro de class Sí, entre todos los objetos escuela = "EPO"

Sintaxis (pseudocódigo / Python)

Pseudocódigo de diseño (no ejecutable en PSeInt)

Clase Celular
	Atributos: marca, bateria
	Metodo cargar(minutos):
		bateria <- minimo(100, bateria + minutos / 2)
	Metodo estado():
		Devolver marca + " al " + bateria + "%"
FinClase

Python

class Celular:
    total_creados = 0                  # atributo de clase (compartido)

    def __init__(self, marca, bateria=50):
        self.marca = marca             # atributos de instancia
        self.bateria = bateria
        Celular.total_creados += 1

    def cargar(self, minutos):         # método que modifica el estado
        self.bateria = min(100, self.bateria + minutos // 2)

    def usar(self, minutos):
        self.bateria = max(0, self.bateria - minutos)

    def __str__(self):                 # cómo se muestra con print()
        return f"{self.marca} ({self.bateria}%)"

mio = Celular("Motorola", 30)
tuyo = Celular("Samsung")

mio.cargar(60)
tuyo.usar(20)
print(mio)
print(tuyo)
print("Celulares creados:", Celular.total_creados)

Salida:

Motorola (60%)
Samsung (30%)
Celulares creados: 2

__str__ es un método especial: Python lo usa al hacer print(objeto) o str(objeto).

Ejemplo guiado

Problema: una clase para la libreta de calificaciones de un alumno, con métodos para agregar, calcular el promedio y saber si aprobó.

class Libreta:
    minimo_aprobatorio = 6

    def __init__(self, alumno):
        self.alumno = alumno
        self.calificaciones = {}

    def agregar(self, materia, calificacion):
        self.calificaciones[materia] = calificacion

    def promedio(self):
        if not self.calificaciones:
            return 0
        return round(sum(self.calificaciones.values()) / len(self.calificaciones), 2)

    def reprobadas(self):
        return [m for m, c in self.calificaciones.items()
                if c < Libreta.minimo_aprobatorio]

    def __str__(self):
        return f"{self.alumno}: promedio {self.promedio()}"

libreta = Libreta("Sofía")
libreta.agregar("Matemáticas", 8)
libreta.agregar("Química", 5)
libreta.agregar("Inglés", 10)

print(libreta)
print("Reprobadas:", libreta.reprobadas())

Salida esperada:

Sofía: promedio 7.67
Reprobadas: ['Química']

Los métodos promedio y reprobadas consultan el estado; agregar lo modifica. __str__ reutiliza promedio().

Errores comunes

# ✗ Error lógico
class Dado:
    def tirar(self):
        return 4

d = Dado()
print(d.tirar)
<bound method Dado.tirar of <__main__.Dado object at 0x...>>
# ✗ Error lógico: todos los grupos comparten la misma lista
class Grupo:
    alumnos = []
    def inscribir(self, nombre):
        self.alumnos.append(nombre)

a, b = Grupo(), Grupo()
a.inscribir("Ana")
print(b.alumnos)   # ['Ana']

Buenas prácticas

  • Atributos con sustantivos (saldo, nombre) y métodos con verbos (depositar, calcular_promedio).
  • Que los métodos cambien el objeto a través de reglas (no permitir batería mayor a 100).
  • Define __str__ en tus clases para depurar y mostrar resultados.
  • Atributos de clase solo para valores comunes que no cambian por objeto (constantes, contadores).
  • Métodos cortos: si uno crece mucho, divídelo.

Material descargable

Aún no hay material descargable para este tema. Pronto habrá cuadernillos, manuales o laboratorios.

Referencias

© solutions_ · Fundamentos de programación · 37 Atributos y métodos