O módulo dataclasses do Python simplifica a criação de classes usadas para armazenar dados.
Embora a maioria das pessoas saiba sobre o uso básico, há um campo de recurso menos conhecido(default_factory=...) que pode ser extremamente útil para lidar com valores padrão em tipos mutáveis.
Ao definir uma classe de dados, você pode querer usar um valor padrão mutável, como uma lista ou um dicionário.
Usar um padrão mutável diretamente pode levar a um comportamento inesperado devido à forma como os argumentos padrão são compartilhados entre as instâncias.
A função default_factory fornece uma maneira limpa de lidar com padrões mutáveis.
Aqui está um exemplo simples:
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])
Neste exemplo, notas é inicializado com uma lista vazia para cada nova instância de Aluno.
Usar field(default_factory=list) garante que cada instância obtenha sua própria lista separada, evitando as armadilhas de padrões mutáveis compartilhados.
O recurso default_factory é inestimável para evitar problemas comuns com argumentos padrão mutáveis.
Isso ajuda a garantir que cada instância de uma classe de dados tenha seu próprio valor padrão, tornando seu código mais previsível e evitando bugs sutis relacionados ao estado compartilhado.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3