Created
January 28, 2020 06:57
-
-
Save luizomf/d9791b2a525d8165b1399ea5801ea3dc to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
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