El módulo de clases de datos de Python simplifica la creación de clases utilizadas para almacenar datos.
Si bien la mayoría de las personas conocen el uso básico, existe un campo de función menos conocido (default_factory=...) que puede ser increíblemente útil para manejar valores predeterminados en tipos mutables.
Al definir una clase de datos, es posible que desee utilizar un valor predeterminado mutable, como una lista o un diccionario.
El uso directo de un valor predeterminado mutable puede provocar un comportamiento inesperado debido a la forma en que se comparten los argumentos predeterminados entre instancias.
La función default_factory proporciona una manera limpia de manejar valores predeterminados mutables.
Aquí tienes un ejemplo sencillo:
from dataclasses import dataclass, field from typing import List @dataclass class Student: name: str grades: List[int] = field(default_factory=list) # Use default_factory for mutable default # Create new Student instances student1 = Student(name="Alice") student2 = Student(name="Bob", grades=[90, 85]) # Modify student1's grades student1.grades.append(95) print(student1) # Output: Student(name='Alice', grades=[95]) print(student2) # Output: Student(name='Bob', grades=[90, 85]) # Output: # Student(name='Alice', grades=[95]) # Student(name='Bob', grades=[90, 85])
En este ejemplo, las calificaciones se inicializan con una lista vacía para cada nueva instancia de Estudiante.
El uso de field(default_factory=list) garantiza que cada instancia obtenga su propia lista separada, evitando los inconvenientes de los valores predeterminados mutables compartidos.
La característica default_factory es invaluable para evitar problemas comunes con argumentos predeterminados mutables.
Ayuda a garantizar que cada instancia de una clase de datos tenga su propio valor predeterminado, lo que hace que su código sea más predecible y evita errores sutiles relacionados con el estado compartido.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3