0Pricing
Python Academy · Lección

La biblioteca attrs

Compare attrs con dataclasses

La biblioteca attrs es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.

¿Qué es attrs?

attrs es una biblioteca de terceros que introdujo la idea de crear una clase a partir de sus campos años antes de que dataclasses llegara a la biblioteca estándar. El módulo estándar dataclasses se inspiró directamente en ella.

  • attrs se instala por separado: pip install attrs.
  • Ofrece más funciones que dataclasses.
  • dataclasses está integrada y cubre la mayoría de las necesidades cotidianas.

La API moderna de attrs

La versión moderna de attrs utiliza @define y field() del espacio de nombres attrs. Su estructura es muy similar a la de una dataclass.

from attrs import define, field

@define
class Point:
    x: int
    y: int

p = Point(1, 2)
print(p)

Slots de forma predeterminada

Una diferencia importante: las clases @define utilizan __slots__ automáticamente. Esto reduce el uso de memoria y evita añadir accidentalmente atributos no declarados. Las dataclasses normales utilizan un __dict__ habitual, a menos que pase slots=True (Python 3.10 o posterior).

Validadores integrados

attrs incluye validadores listos para usar. Un campo puede declarar un validador que se ejecuta durante la construcción y genera una excepción si el valor no es válido. Las dataclasses no tienen validación integrada; debe escribirla usted mismo en __post_init__.

from attrs import define, field
from attrs.validators import instance_of

@define
class User:
    age: int = field(validator=instance_of(int))

User(30)        # ok
User('oops')    # raises TypeError

Convertidores

Un convertidor transforma el valor de entrada antes de almacenarlo. Por ejemplo, puede convertir automáticamente una cadena en un entero. Esta es otra función que las dataclasses no ofrecen.

from attrs import define, field

@define
class Item:
    price: int = field(converter=int)

i = Item('42')   # stored as the integer 42
print(i.price)

El equivalente con dataclasses

Esta es la misma idea expresada con la biblioteca estándar. La validación y la conversión se escriben manualmente en __post_init__, ya que las dataclasses no ofrecen hooks por campo.

from dataclasses import dataclass

@dataclass
class Item:
    price: int

    def __post_init__(self):
        self.price = int(self.price)

print(Item('42'))

asdict en ambas

Ambas bibliotecas proporcionan un helper asdict. El de dataclasses se encuentra en dataclasses; el de attrs, en attrs. Su comportamiento es prácticamente idéntico.

from dataclasses import dataclass, asdict

@dataclass
class Point:
    x: int
    y: int

print(asdict(Point(1, 2)))

Frozen en attrs

attrs también admite la inmutabilidad. Utilice @frozen (un atajo para @define(frozen=True)) para crear instancias de solo lectura, de forma equivalente a @dataclass(frozen=True).

from attrs import frozen

@frozen
class Point:
    x: int
    y: int

p = Point(1, 2)
print(p)
# p.x = 9  would raise FrozenInstanceError

Comparación de funciones

Estas son sus características:

  • dataclasses: forma parte de la biblioteca estándar, no requiere instalación y cubre los aspectos básicos.
  • attrs: ofrece validadores, convertidores, slots de forma predeterminada y más opciones de configuración.
  • Ambas generan __init__, __repr__ y __eq__.

¿Cuál debería utilizar?

Elija dataclasses para contenedores de datos sencillos sin dependencias adicionales. Elija attrs cuando necesite validadores, convertidores o sus opciones de configuración más completas y no le importe añadir una dependencia. Muchos proyectos comienzan con dataclasses y solo migran cuando se les quedan pequeñas.

Un origen compartido

Como dataclasses tomó tantas ideas de attrs, migrar entre ambas suele ser un proceso mecánico: cambie la importación y el decorador, y ajuste los validadores o convertidores. Conocer una hace que la otra resulte familiar de inmediato.

  • @define corresponde a @dataclass.
  • attrs.field corresponde a dataclasses.field.
  • Al pasar a dataclasses, los validadores se trasladan a __post_init__.

Comprobación rápida

¿Qué capacidad ofrece attrs que el módulo estándar dataclasses no proporciona de forma integrada?

Resumen

Ha comparado attrs con dataclasses.

  • attrs inspiró dataclasses y ofrece más funciones.
  • attrs añade validadores, convertidores y slots de forma predeterminada.
  • dataclasses está integrada y no requiere instalación.
  • Elija la herramienta más sencilla que satisfaga sus necesidades.

Preguntas frecuentes

¿La lección «La biblioteca attrs» es gratis?

Sí — el texto completo de «La biblioteca attrs» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.

¿Qué aprenderé en «La biblioteca attrs»?

Compare attrs con dataclasses Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Python Academy?

No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «La biblioteca attrs»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Python Academy?

Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Definir una dataclass
  2. Valores predeterminados y field()
  3. Opciones de inmutabilidad y comparación
  4. La biblioteca attrs
← Volver a Python Academy