Prefácio
dataclass
É uma ferramenta muito útil quando precisamos definir uma classe simples de contêiner de dados em Python . __init__()
Ele nos permite criar classes facilmente com alguns recursos de automação, como geração automática __repr__()
e __eq__()
métodos. Este artigo apresentará o uso da classe de dados em detalhes e fornecerá exemplos para ilustrar como usá-la.
o que édataclass?
dataclass
É um decorador na biblioteca padrão do Python, que pode ser usado para decorar uma classe e transformá-la em uma classe para armazenar dados sem escrever construtores, métodos e métodos de comparação complicados __repr__()
.
Observação: o Dataclass pode ser usado diretamente após o Python 3.7. As versões anteriores precisam instalar dataclasses
o módulo primeiro. O comando de instalação é o seguinte:
pip install dataclasses==0.8
Mas se já o instalamos pydantic
, não precisamos instalá- dataclasses
lo novamente.
Como usardataclass?
Para usá-lo dataclass
, primeiro você precisa importá-lo:
from dataclasses import dataclass
Em seguida, @dataclass
marcamos uma classe com um decorador para torná-la uma classe de dados. As propriedades das classes de dados são geralmente definidas como variáveis da classe e seus tipos podem ser anotados nas variáveis.
Vamos ilustrar como usá-lo com um exemplo dataclass
.
Exemplo: Definir uma classe Person
Suponha que queiramos definir uma classe que represente informações pessoais, incluindo nome e idade. Usando dataclass
, podemos definir esta classe da seguinte forma:
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
Neste exemplo, definimos uma Person
classe de dados nomeada, que possui duas propriedades: name
e age
, representando nome e idade respectivamente. Observe que não escrevemos construtores __repr__(
) ou __eq__()
métodos.
Agora, vamos ver como Person
criar objetos usando esta classe:
# 创建一个Person对象
person1 = Person("Alice", 30)
# 创建另一个Person对象
person2 = Person("Bob", 25)
# 打印对象
print(person1) # 输出: Person(name='Alice', age=30)
print(person2) # 输出: Person(name='Bob', age=25)
# 检查两个对象是否相等
print(person1 == person2) # 输出: False
Conforme mostrado acima, podemos criar objetos com muita facilidade Person
, imprimi-los produz uma saída significativa e podemos usar ==
operadores para compará-los. Este é dataclass
um recurso fornecido automaticamente.
dataclass
O comportamento padrão de
dataclass
São fornecidos alguns comportamentos padrão, que podem ser personalizados conforme necessário. Aqui estão alguns comportamentos padrão:
__init__()
Método:dataclass
gera automaticamente um método de inicialização que aceita e inicializa todas as propriedades da classe.__repr__()
Método:dataclass
Gere automaticamente uma representação de string legível para imprimir objetos.__eq__()
Método:dataclass
gera automaticamente um método de igualdade para comparar se as propriedades de dois objetos são iguais.__hash__()
Método: Se todos os campos da classe forem imutáveis (como str, int, etc.),dataclass
um método hash é gerado automaticamente para que o objeto possa ser usado como chave de dicionário.
dataclass
comportamento personalizado
Embora dataclass
muitos comportamentos padrão sejam fornecidos, você pode personalizá-los conforme necessário. Por exemplo, podemos usar @dataclass
os parâmetros do decorador para especificar diferentes comportamentos. Aqui estão algumas opções de personalização comuns:
init
: Se definido como False, os métodos não serão gerados__init__()
, o que é útil ao criar objetos imutáveis.repr
: se definido como False, o método não será gerado__repr__()
, o que é útil quando uma representação de string legível por humanos não é necessária.eq
: Se definido como False, o método não será gerado__eq__()
, o que é útil quando não há necessidade de comparar objetos quanto à igualdade.frozen
: se definido como True, uma classe imutável será gerada e todos os campos se tornarão propriedades somente leitura.
Aqui está um exemplo que demonstra como personalizar dataclass
o comportamento:
from dataclasses import dataclass
@dataclass(init=False, repr=False, eq=False)
class CustomPerson:
name: str
age: int
# 创建一个CustomPerson对象
custom_person = CustomPerson("Charlie", 35)
# 由于我们禁用了__init__,无法初始化对象
# 打印会引发错误
print(custom_person) # 引发错误
No exemplo acima, desabilitamos os __init__()
métodos __repr__()
e __eq__()
, resultando em nenhuma criação ou comparação de objetos.
Resumir
dataclass
é uma ferramenta poderosa para criar classes para armazenar dados. Elimina a necessidade de escrever muito código repetitivo, tornando o código mais limpo e legível. Com o uso criterioso dataclass
das opções de personalização, podemos adaptar o comportamento da classe de acordo com nossas necessidades. dataclass
Espero que este artigo seja útil para que todos possam entender e usar o .