<jupyter_start><jupyter_text>[![img/pythonista.png](img/pythonista.png)](https://www.pythonista.io)  *Dataclasses*. Aún  cuando no se especifique expresamente, todas las clases en *Python 3* son subclases de ```object```, a partir del cual se obtienen los métodos y atributos mínimos de una clase de *Python*.La biblioteca estándar de *Python* contiene el módulo ```datclasses```, el cual permite crear clases que modifican algunos aspectos con respect a las clases creadas a partir de ```object```.https://docs.python.org/3/library/dataclasses.html  La función ```dataclasses.dataclass```.La función ```dataclasses.dataclass``` puede ser usada como un decorador aplicado sobre una clase.Las *dataclasses* permiten usar pistas de tipo (*type hints*) para definir un atributo.Aquellos atributos a los que no se les asigne un valor al ser definidos, deben de ser ingresados como argumentos al momento de instanciar. El resto de los atributos son opcionales.**Nota:** Las pistas de tipo son definidas en el [*PEP 484*](https://www.python.org/dev/peps/pep-0484/).Las dataclases se definen de la siguiente manera:```@dataclassclass ()    :  =     :  =     ...    :     ...```Las dataclases se instancian de la siguiente manera:```(=, =, ... , =)```**Nota:** Aquellos atributos a losa que no se les asignó un valor deben de ser ingresados como argumentos de forma obligatoria.https://docs.python.org/3/library/dataclasses.htmldataclasses.dataclass<jupyter_code>from dataclasses import dataclass<jupyter_output><empty_output><jupyter_text>**Ejemplo:** * A continuación se creará la dataclase ```Alumno```.<jupyter_code>@dataclass
class Alumno():
    nombre: str
    primer_apellido: str
    promedio: float
    segundo_apellido: str = ""
    inscrito: bool = True<jupyter_output><empty_output><jupyter_text>* La siguiente celda instanciará a la dataclase ```Alumno``` con los argumentos obligatorios.<jupyter_code>Alumno(nombre="Juan", 
       primer_apellido="Pérez", 
       promedio=8.6)<jupyter_output><empty_output><jupyter_text>* La siguiente celda instanciará ```Alumno```, pero con argumentos posicionales.<jupyter_code>Alumno("Juan", 
       "Pérez", 
       8.6)<jupyter_output><empty_output><jupyter_text>* La siguiente celda tratará de instanciar ```Alumno```, pero con argumentos posicionales, lo que desencadenará una excepción de tipo  ```TypeError```.<jupyter_code>Alumno(nombre="Juan", 
       primer_apellido="Pérez")<jupyter_output><empty_output><jupyter_text>* La siguiente celda trataŕa de instanciar ```Alumno```, pero con argumentos adicionales, loq eu desnecadenará una excepción de tipo ```TypeError```.<jupyter_code>Alumno(nombre="Juan", 
       primer_apellido="Pérez", 
       promedio=8.5, 
       genero = "M")<jupyter_output><empty_output><jupyter_text>La función ```dataclasses.asdict()```.Esta función serializa un objeto instanciado de unan dataclase y regresa un objeto de tipo ```dict```.<jupyter_code>from dataclasses import asdict
alumno = Alumno(nombre="Juan", 
       primer_apellido="Pérez", 
       promedio=8.6)
asdict(alumno)<jupyter_output><empty_output><jupyter_text>La función ```dataclasses.astuple()```.Esta función serializa un objeto instanciado de unan dataclase y regresa un objeto de tipo ```tuple``` con los valores de las propiedades del objeto.<jupyter_code>from dataclasses import astuple
astuple(alumno)<jupyter_output><empty_output>
StarcoderdataJupyterStructuredCleanDedup