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