Sintaxis básica y uso
Para comprender una dataclass y su sintaxis, debe comprender primero el diseño y la estructura básicos de una clase de Python. A continuación se muestra un ejemplo que muestra una clase simple de Python:
Clase StockInhand:En la muestra de código anterior, se ha creado una nueva clase llamada "stockInhand" con un método "__init__" definido dentro de él. El método __init__ se invoca automáticamente cada vez que crea una nueva instancia de Clase StockInhand. En este caso, el método __init__ se ha definido con algunos argumentos obligatorios. Por lo tanto, no puede crear una nueva instancia de StockInhand sin algunos valores para los argumentos necesarios. El argumento "Self" proporciona una referencia a la instancia de una clase, por lo que puede usarlo para referirse a cualquier variable o método dentro de una clase siempre que estas variables y métodos se hayan definido haciendo uso del argumento Self. El autoengo actúa como una herramienta de conveniencia y se puede nombrar cualquier cosa. También puedes omitirlo por completo. En las últimas dos declaraciones, se crea una nueva instancia de Clase StockInhand y se accede a sus variables utilizando notación de puntos.
Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:
40 50 60La misma clase se puede definir usando DatacLass de la siguiente manera:
de DataClasses importLa primera declaración importa el decorador "DatacLass" del módulo "Dataclasses". Los decoradores se pueden usar para modificar el comportamiento de los objetos de Python sin cambiarlos realmente. En este caso, el decorador de datacLass está predefinido y proviene del módulo DatacLasses. Para definir un DatacLass, debe adjuntar DatacLass Decorator usando el símbolo "@" a una clase de Python, como se muestra en la muestra de código anterior. En las siguientes declaraciones, las variables en DatacLass se definen utilizando sugerencias de tipo para indicar qué tipo de objeto son. Se introdujeron sugerencias de tipo en Python 3.6 y se definen usando símbolos ":" (colon). Puede crear una nueva instancia de DataClass como cualquier otra clase de Python. Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:
40 50 60Tenga en cuenta que si un método en DatacLass devuelve un valor, puede asignarle una pista de tipo usando el símbolo "->". Aquí hay un ejemplo:
de DataClasses importSe ha creado un nuevo método llamado "Total_stock" y se le ha asignado una pista de tipo "INT" reservada para indicar el tipo de valor de retorno. Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:
150Las variables en los objetos de DataClass pueden tener valores predeterminados
Puede asignar valores predeterminados a los miembros de DataClasses después de un tipo de sugerencias. Aquí hay un ejemplo:
de DataClasses importEn la segunda última declaración, no se han suministrado argumentos durante la creación de una nueva instancia de stockInhand DataClass, por lo que se han utilizado los valores predeterminados. Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:
150Los miembros de DatacLass son mutables
Las dataclass son mutables, por lo que puede cambiar el valor de sus miembros obteniendo una referencia a ellos. A continuación se muestra una muestra de código:
de DataClasses importEl valor de la variable de manzanas se ha cambiado antes de llamar al método total_stock. Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:
210Creación de un DatacLass desde una lista
Puede crear un DatacLass mediante programación utilizando el método "Make_DataClass", como se muestra en la muestra de código a continuación:
importar dataclassesEl método make_dataclass toma un nombre de clase y una lista de campos de miembros como dos argumentos obligatorios. Puede definir a los miembros como una lista de tuplas donde cada tupla contiene el nombre de la variable, su tipo de pista y su valor predeterminado. No es necesario definir el valor predeterminado, puede omitirlo para asignar ningún valor predeterminado. El argumento opcional del espacio de nombres toma un diccionario que se puede usar para definir funciones de miembros utilizando pares de valor clave y funciones lambda. El código anterior es exactamente equivalente a definir el siguiente DatacLass manualmente:
de DataClasses importDespués de ejecutar las dos muestras de código anteriores, debe obtener la siguiente salida:
210¿Por qué usar un dataclass en lugar de una clase??
Quizás se pregunte por qué utilizar Dataclasses si son casi lo mismo que otras clases de Python? Uno de los principales beneficios del uso de dataclasses es su concisión. Puede crear dataclasses utilizando taquigrafía limpia y mínima sin mucho código básico. Están especialmente diseñados para usarse como contenedores de datos donde se pueden acceder fácilmente a las variables utilizando la notación de puntos, aunque también puede usar dataclasses como clases completas. En términos simples, si desea usar una clase de Python solo para usarlo como un almacén de datos, Dataclass parece ser una mejor opción.
Conclusión
Las dataclass en Python proporcionan una forma mínima de crear rápidamente clases de Python destinadas a ser utilizadas como almacenes de datos. Puede obtener referencias a miembros de DatacLasses que usan notación DOT y son especialmente útiles cuando busca diccionarios como pares de valor clave a los que se puede acceder usando notación DOT.