Estructuras en Python

Vaibhav Vaibhav 10 octubre 2023
Estructuras en Python

Python es un lenguaje de programación orientado a objetos, lo que significa que tiene clases y objetos. Mientras que C no es un lenguaje de programación orientado a objetos, lo que significa que solo se puede realizar programación funcional usándolo. Pero C tiene estructuras que son un tipo de datos definido por el usuario.

No tenemos estructuras en Python, pero podemos implementarlas o representar su comportamiento usando otros objetos, es decir, clases de datos. Una clase de datos es una clase que solo contiene campos y métodos CRUD (captadores y definidores) para manipular estos campos. El principal objetivo de estas clases es almacenar datos o representar algunos datos en forma de paquete. Las clases de datos representan entidades y, dado que las entidades tienen varios parámetros o propiedades, las clases de datos facilitan el empaquetado de todo en un solo objeto.

En este artículo, aprenderemos cómo usar clases de datos en Python.

Clase de datos en Python

Python 3.7 introdujo las clases de datos. Aunque las clases de datos se pueden implementar usando clases primitivas de Python, una clase de datos implementa la mayoría de las funcionalidades requeridas detrás de escena, lo que hace que el código Python para una clase de datos sea más corto y legible. La implementación usando clases primitivas de Python permitirá un mayor control, pero para clases de datos más grandes, la implementación puede volverse desordenada y masiva, haciéndola inmanejable.

Python tiene un decorador dataclass, definido dentro del módulo dataclass. Este decorador agrega automáticamente métodos especiales requeridos dentro de clases de datos como __init__(), __repr__(), etc.

Aquí hay un ejemplo.

from dataclasses import dataclass


@dataclass
class Item:
    name: str
    price: float
    quantity: int

    def total_cost(self) -> float:
        return self.price * self.quantity

Como se mencionó anteriormente, el decorador @dataclass agrega métodos especiales automáticamente. Esto significa que el siguiente método __init__() se agregará automáticamente.

def __init__(self, name: str, price: float, quantity: int = 0):
    self.name = name
    self.price = price
    self.quantity = quantity

Además, esta clase de datos se puede utilizar para crear objetos de tipo Item, y estos objetos se pueden tratar como objetos de clase normales.

from dataclasses import dataclass


@dataclass
class Item:
    name: str
    price: float
    quantity: int

    def total_cost(self):
        return self.price * self.quantity


a = Item("Chocolate", 25, 100)
b = Item("Chips", 35, 150)
c = Item("Cookie", 10, 50)
print(a)
print(b)
print(c)
print(a.total_cost())
print(b.total_cost())
print(c.total_cost())

El decorador dataclass tiene algunos parámetros, a saber,

  • init - True por defecto. Si es True, se definirá el método __init__() de la clase de datos.
  • repr - True por defecto. Si es True, se definirá el método __repr__() de la clase de datos.
  • eq - True por defecto. Si es True, se definirá el método __eq__() de la clase de datos.
  • order - False por defecto. Si es True, se definirán los métodos __lt__(), __le__(), __gt__() y __ge__() de la clase de datos.
  • unsafe_hash - False por defecto. Si es False, se definirá el método __hash__() de la clase de datos.
  • frozen - False por defecto. Si es True, los atributos de la clase de datos se congelarán. Esto significa que, una vez inicializados, no se pueden manipular más.
  • match_args - True por defecto.
  • kw_only - False por defecto. Si es True, todos los campos de la clase de datos se marcarán como solo palabras clave.
  • slots - False por defecto.

Estos parámetros se pueden configurar al colocar un decorador de dataclass sobre una implementación de clase. Algunos ejemplos de los mismos son los siguientes.

@dataclass
class A:
    pass


@dataclass(init=True, repr=True, order=True)
class B:
    pass


@dataclass(
    eq=True,
    order=False,
    unsafe_hash=True,
)
class C:
    pass

Para obtener más información sobre el módulo dataclass consulte la documentación oficial aquí.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

Artículo relacionado - Python Dataclass