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.
from dataclasses import dataclasstrae 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.@dataclassjusto antes declass 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.nombre: stryedad: intdeclaran 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.print(p1)muestraPersona(nombre='Ana', edad=30)gracias al__repr__automático. Sin@dataclassverías la dirección de memoria del objeto y tendrías que escribir tú ese método.p1.nombreyp1.edadacceden 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.