Skip to content

Instantly share code, notes, and snippets.

@luizomf
Created January 28, 2020 06:57
Show Gist options
  • Save luizomf/d9791b2a525d8165b1399ea5801ea3dc to your computer and use it in GitHub Desktop.
Save luizomf/d9791b2a525d8165b1399ea5801ea3dc to your computer and use it in GitHub Desktop.
"""
O que são dataclasses? O módulo Dataclasses fornece um decorador e funções
para criar automaticamente métodos, como __init__(), __repr__(), __eq__ (etc)
em classes definidas pelo usuário.
Basicamente, dataclasses são syntax sugar para criar classes normais.
Foi originalmente descrito na PEP 557.
Adicionado na versão 3.7 do Python.
Leia a documentação: https://docs.python.org/pt-br/3/library/dataclasses.html
"""
from dataclasses import dataclass
from dataclasses import field
from dataclasses import asdict, astuple
@dataclass(eq=True, repr=True, order=True, frozen=False, init=True)
class Pessoa:
nome: str
sobrenome: str = field(repr=False)
def __post_init__(self):
if not isinstance(self.nome, str):
raise TypeError(
f'Invalid type {type(self.nome).__name__} != str em {self}'
)
@property
def nome_completo(self):
return f'{self.nome} {self.sobrenome}'
p1 = Pessoa('A', '5')
p2 = Pessoa('C', '3')
p3 = Pessoa('D', '4')
p4 = Pessoa('E', '6')
pessoas = [p1, p2, p3, p4]
print(sorted(pessoas, key=lambda pessoa: pessoa.sobrenome, reverse=True))
print(p1)
# print(p1)
# print(p1 == p2)
# print(p1.nome)
# print(p1.sobrenome)
# print(p1.nome_completo)
print()
print(asdict(p1))
print(astuple(p1))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment