Ejercicio 02 — Usa @dataclass para definir Persona(nombre, edad)

Dificultad: verde · Módulo 08 (Clases y archivos)

Enunciado

Usa @dataclass para definir Persona(nombre, edad). Crea dos instancias y muestralas.

Cómo se resuelve

@dataclass es un atajo para clases que solo guardan datos: te ahorra escribir a mano el constructor y la impresión.

  1. from dataclasses import dataclass trae el decorador desde la librería estándar. Un decorador es algo que se coloca encima de una clase (o función) con @ para modificarla.
  2. @dataclass justo antes de class Persona: hace que Python genere solo el __init__, el __repr__ y el __eq__. No has escrito ningún constructor y aun así Persona("Ana", 30) funciona.
  3. nombre: str y edad: int declaran los campos con su tipo. En una dataclass estas anotaciones no son decorativas: son las que le dicen al decorador qué parámetros debe tener el __init__ generado y en qué orden.
  4. print(p1) muestra Persona(nombre='Ana', edad=30) gracias al __repr__ automático. Sin @dataclass verías la dirección de memoria del objeto y tendrías que escribir tú ese método.
  5. p1.nombre y p1.edad acceden a los atributos como en cualquier clase; la dataclass no cambia esa parte, solo evita el código repetitivo.

Trampa habitual: creer que los campos se declaran con = como variables normales (nombre = str). En una dataclass se declaran con dos puntos y el tipo (nombre: str); un = significaría un valor por defecto, no el tipo del campo.

Para practicar — cópialo y complétalo

Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.

# Curso de Python — Modulo 08: Clases, dataclasses y archivos
# Ejercicio 02 — PRACTICA (rellena los TODO)
# Enunciado: Usa @dataclass para definir Persona(nombre, edad). Crea dos instancias y muestralas.
# Dificultad: verde
# Ejecutar: python3 ej02_practica.py
 
# TODO: importa dataclass desde el modulo dataclasses
 
 
# TODO: aplica el decorador @dataclass a la clase Persona
class Persona:
    # TODO: declara los campos nombre (str) y edad (int) con anotaciones de tipo
    pass
 
 
# --- Programa principal ---
# TODO: crea una instancia p1 con nombre="Ana" y edad=30
# TODO: crea una instancia p2 con nombre="Luis" y edad=25
 
# TODO: imprime p1 y p2 directamente con print()
# Salida esperada:
# Persona(nombre='Ana', edad=30)
# Persona(nombre='Luis', edad=25)
 
# TODO: imprime una frase accediendo a los atributos de cada persona
# Salida esperada:
# Ana tiene 30 anos.
# Luis tiene 25 anos.

Solución — cópiala y ejecútala

# Curso de Python — Modulo 08: Clases, dataclasses y archivos
# Ejercicio 02 — MODELO (resuelto)
# Enunciado: Usa @dataclass para definir Persona(nombre, edad). Crea dos instancias y muestralas.
# Dificultad: verde
# Ejecutar: python3 ej02_modelo.py
 
from dataclasses import dataclass
 
 
# @dataclass genera __init__, __repr__ y __eq__ automaticamente
@dataclass
class Persona:
    nombre: str   # campo 1
    edad: int     # campo 2
 
 
# --- Programa principal ---
p1 = Persona("Ana", 30)
p2 = Persona("Luis", 25)
 
# __repr__ generado por @dataclass produce: Persona(nombre='Ana', edad=30)
print(p1)
print(p2)
 
# Acceso directo a atributos
print(f"{p1.nombre} tiene {p1.edad} anos.")
print(f"{p2.nombre} tiene {p2.edad} anos.")

Cómo usarlo

Pega el código en un fichero y ejecútalo con tu toolchain habitual (o el botón de Ejecutar de tu editor). Antes de mirar la solución, intenta completar tú el esqueleto: es la mejor forma de aprender.

Conexiones