Модуль классов данных Python упрощает создание классов, используемых для хранения данных.
Хотя большинство людей знают о базовом использовании, существует менее известное поле функции (default_factory=...), которое может быть невероятно полезно для обработки значений по умолчанию в изменяемых типах.
При определении класса данных вы можете использовать изменяемое значение по умолчанию, например список или словарь.
Непосредственное использование изменяемого значения по умолчанию может привести к неожиданному поведению из-за того, что аргументы по умолчанию распределяются между экземплярами.
Функция default_factory обеспечивает простой способ обработки изменяемых значений по умолчанию.
Вот простой пример:
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])
В этом примере оценки инициализируются пустым списком для каждого нового экземпляра Student.
Использование field(default_factory=list) гарантирует, что каждый экземпляр получит свой отдельный список, избегая ошибок общих изменяемых значений по умолчанию.
Функция default_factory неоценима для предотвращения распространенных проблем с изменяемыми аргументами по умолчанию.
Это помогает гарантировать, что каждый экземпляр класса данных имеет собственное значение по умолчанию, что делает ваш код более предсказуемым и позволяет избежать тонких ошибок, связанных с общим состоянием.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3