La guía definitiva para las clases de datos en Python 3.7

Este artículo analiza las clases de datos en Python 3.7 y proporciona una guía introductoria para las clases de datos en Python 3.7 y versiones posteriores. 

Data Class es un nuevo concepto introducido en la versión Python 3.7. Puede usar las clases de datos no solo como un contenedor de conocimientos, sino también para escribir código repetitivo y simplificar el proceso de creación de clases, ya que viene con algunos métodos implementados de forma gratuita. Una clase de datos también podría considerarse como una categoría que normalmente contiene datos, pero no se limita a eso. 

Clases de datos básicos

Las siguientes formas muestran cómo se puede crear una clase de datos básicos:

1. Usando decorador: Se crean usando el nuevo decorador @dataclass .

Ejemplo: 

Python3

# import package
from dataclasses import dataclass
  
# make a dataclass with decorator
@dataclass
class DataClassGFG:
    Job: str
    Salary: float
  
# make an object with values required by dataclass
DataClassObject = DataClassGFG("Author",50000.00)
  
# view dataclass object
print(DataClassObject)

Producción:

DataClassGFG(Trabajo=’Autor’, Salario=50000.0)

2. Usando make_dataclass():

Ejemplo: 

Python3

# import package
from dataclasses import make_dataclass
  
# make a dataclass with make_dataclass
  
DataClassGFG = make_dataclass("DataClassGFG",["Job","Salary"])
  
# make an object with values required by dataclass
DataClassObject = DataClassGFG("Author",50000.00)
  
# view dataclass object
print(DataClassObject)

Producción:

DataClassGFG(Trabajo=’Autor’, Salario=50000.0)

3. Uso de namedtuple : Uso del método namedtuple() de las colecciones. Es similar a make_dataclass().

Ejemplo: 

Python3

# import package
from collections import namedtuple
  
# make a dataclass with namedtuple
  
DataClassGFG = namedtuple("DataClassGFG",["Job","Salary"])
  
# make an object with values required by dataclass
DataClassObject = DataClassGFG("Author",50000.00)
  
# view dataclass object
print(DataClassObject)

Producción:

DataClassGFG(Trabajo=’Autor’, Salario=50000.0)

Clases de datos inmutables

Una de las características definitorias de la tupla con nombre que vimos anteriormente es que es inmutable, es decir, el valor de sus campos nunca puede cambiar. Para varios tipos de clases de datos, esta suele ser una excelente idea para crear una clase inmutable y para lograr esto, simplemente establezca frozen=True una vez que la haya creado. 

Ejemplo: 

Python3

# import package
from dataclasses import dataclass
  
# make a dataclass with decorator
@dataclass(frozen=True)
class DataClassGFG:
    Job: str
    Salary: float
  
# make an object with values required by dataclass
DataClassObject = DataClassGFG("Author",50000.00)
  
# view dataclass object
print(DataClassObject)
  
# check immutable nature of class
DataClassObject.Job = "Writer"

Producción:

DataClassGFG(Trabajo=’Autor’, Salario=50000.0)

Rastreo (llamadas recientes más última):

 Archivo “main.py”, línea 17, en <módulo>

   DataClassObject.Job = “Escritor”

 Archivo “<string>”, línea 4, en __setattr__

dataclasses.FrozenInstanceError: no se puede asignar al campo ‘Trabajo’
 

Clases de datos flexibles

Ya discutimos algunos métodos para hacer clases de datos y ahora estudiaremos algunas características más avanzadas como parámetros para un decorador de @dataclass. Agregar parámetros a una clase de datos nos brinda más control al crear una clase de datos.

Ejemplo:

Python3

# import package
from dataclasses import dataclass
from typing import List
  
# make a dataclass with decorator
@dataclass
class DataClassGFG:
    Job: str
    Salary: float
          
@dataclass
class GFGJobs:
    Jobs: List[DataClassGFG]
  
# make objects with values required by dataclass
DataClassObject1 = DataClassGFG("Author",50000.00)
DataClassObject2 = DataClassGFG("Writer",40000.00)
  
# view dataclass objects
print(DataClassObject1)
print(DataClassObject2)
  
# make an object of another dataclass
GFGJobsObject = GFGJobs([DataClassObject1,DataClassObject2])
  
# view dataclass object
print(GFGJobsObject)

Producción:

DataClassGFG(Trabajo=’Autor’, Salario=50000.0)

DataClassGFG(Trabajo=’Escritor’, Salario=40000.0)

GFGJobs(Trabajos=[DataClassGFG(Trabajo=’Autor’, Salario=50000.0), DataClassGFG(Trabajo=’Escritor’, Salario=40000.0)])

Optimización de clases de datos

Para optimizar las clases de datos usamos ranuras. Las ranuras a menudo se usan para hacer que las clases sean más rápidas y usar menos memoria. Las clases de datos no tienen ninguna sintaxis explícita para trabajar con ranuras, pero la forma tradicional de crear ranuras también funciona para las clases de datos.

Ejemplo:

Python3

# import package
from dataclasses import dataclass
  
# make a dataclass with decorator
@dataclass
class DataClassGFG:
    Job: str
    Salary: float
          
@dataclass
class SlotClassGFG:
    __slots__ = ["Job","Salary"]
    Job: str
    Salary: float
  
# make objects with values required by dataclass
DataClassObject1 = DataClassGFG("Author",50000.00)
DataClassObject2 = SlotClassGFG("Writer",40000.00)
  
# view dataclass objects
print(DataClassObject1)
print(DataClassObject2)
  
# view dataclass object slot
print(DataClassObject2.__slots__)

Producción:

DataClassGFG(Trabajo=’Autor’, Salario=50000.0)

SlotClassGFG(Trabajo=’Escritor’, Salario=40000.0)

[‘Trabajo’, ‘Salario’]

Herencia

Simplemente podemos usar el concepto de herencia creando una subclase de datos de una clase de datos. 

Ejemplo: 

Python3

# import package
from dataclasses import dataclass
  
# make a dataclass with decorator
@dataclass
class DataClassGFG:
    Job: str
    Salary: float
          
@dataclass
class SubDataClassGFG(DataClassGFG):
    Standard: str = "Top"
    Salary: float = 100000.00
  
  
# make objects with values required by dataclass
DataClassObject1 = DataClassGFG("Author",100000.00)
DataClassObject2 = DataClassGFG("Author",50000.00)
  
# view dataclass objects
print(DataClassObject1)
print(DataClassObject2)
  
# make object with values required by subdataclass
SubDataClassObject = SubDataClassGFG("Author")
  
# view subdataclass object
print(SubDataClassObject)

Producción:

DataClassGFG(Trabajo=’Autor’, Salario=100000.0)

DataClassGFG(Trabajo=’Autor’, Salario=50000.0)

SubDataClassGFG(Trabajo=’Autor’, Salario=100000.0, Estándar=’Superior’)

Publicación traducida automáticamente

Artículo escrito por deepanshu_rustagi 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 *