Clases de datos en Python | Una introducción

El módulo de clase de datos se introduce en Python 3.7 como una herramienta de utilidad para crear clases estructuradas especialmente para almacenar datos. Estas clases tienen ciertas propiedades y funciones para tratar específicamente con los datos y su representación.
DataClasses en Python3.6 ampliamente utilizado 
Aunque el módulo se introdujo en Python3.7, también se puede usar en Python3.6 instalando la biblioteca de clases de datos
 

pip install dataclasses

Las clases de datos se implementan mediante el uso de decoradores con clases. Los atributos se declaran utilizando sugerencias de tipo en Python, que es esencialmente especificar el tipo de datos para las variables en Python.
 

Python3

# A basic Data Class
 
# Importing dataclass module
from dataclasses import dataclass
 
@dataclass
class GfgArticle():
    """A class for holding an article content"""
 
    # Attributes Declaration
    # using Type Hints
 
    title: str
    author: str
    language: str
    upvotes: int
 
# A DataClass object
article = GfgArticle("DataClasses",
                     "vibhu4agarwal",
                     "Python", 0)
print(article)

Producción: 
 

GfgArticle(título=’Clases de datos’, autor=’vibhu4agarwal’, idioma=’Python’, votos a favor=0) 
 

Los dos puntos notables en el código anterior. 
 

  • Sin un constructor __init__() , la clase aceptaba valores y los asignaba a las variables apropiadas.
  • La salida del objeto de impresión es una representación ordenada de los datos presentes en él, sin ninguna función explícita codificada para hacer esto. Eso significa que tiene una función __repr__() modificada .

La clase de datos proporciona un constructor __init__() incorporado a las clases que manejan la creación de datos y objetos para ellas. 
 

Python3

article = GfgArticle()

TypeError: __init__() faltan 4 argumentos posicionales requeridos: ‘título’, ‘autor’, ‘idioma’ y ‘votos a favor’ 
 

También podemos modificar el funcionamiento del constructor incorporado pasando ciertos argumentos o usando funciones especiales que se discutirán en otros artículos.
Igualdad de clases de datos 
Dado que las clases almacenan datos, comprobar si dos objetos tienen los mismos datos es una tarea muy común que se necesita con las clases de datos. Esto se logra usando el operador ==
A continuación se muestra el código de una clase equivalente para almacenar un artículo sin un decorador de clase de datos. 
 

Python3

class NormalArticle():
    """A class for holding an article content"""
 
    # Equivalent Constructor
    def __init__(self, title, author, language, upvotes):
        self.title = title
        self.author = author
        self.language = language
        self.upvotes = upvotes
 
# Two DataClass objects
dClassArticle1 = GfgArticle("DataClasses",
                            "vibhu4agarwal",
                            "Python", 0)
dClassArticle2 = GfgArticle("DataClasses",
                            "vibhu4agarwal",
                            "Python", 0)
 
# Two objects of a normal class
article1 = NormalArticle("DataClasses",
                         "vibhu4agarwal",
                         "Python", 0)
article2 = NormalArticle("DataClasses",
                         "vibhu4agarwal",
                         "Python", 0)

Python3

print("DataClass Equal:", dClassArticle1 == dClassArticle2)
print("Normal Class Equal:", article1 == article2)

Producción: 
 

DataClass Equal: True
Normal Class Equal: False

La igualdad entre dos objetos usando el operador == en python verifica la misma ubicación de memoria. Dado que dos objetos toman diferentes ubicaciones de memoria en la creación, la salida para la igualdad es False . La igualdad entre los objetos DataClass comprueba la igualdad de los datos presentes en él. Esto da cuenta de True como salida para la verificación de igualdad entre dos objetos DataClass que contienen los mismos datos.
 

Publicación traducida automáticamente

Artículo escrito por vibhu4agarwal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *