1
resposta

Hora da prática: métodos especiais e atributos

Exercícios

  • Implemente uma classe chamada Carro com os atributos básicos, como modelo, cor e ano. Crie uma instância dessa classe e atribua valores aos seus atributos.

  • Crie uma classe chamada Restaurante com os atributos nome, categoria, ativo e crie mais 2 atributos. Instancie um restaurante e atribua valores aos seus atributos.
    Modifique a classe Restaurante adicionando um construtor que aceita nome e categoria como parâmetros e inicia ativo como False por padrão. Crie uma instância utilizando o construtor.
    Adicione um método especial str à classe Restaurante para que, ao imprimir uma instância, seja exibida uma mensagem formatada com o nome e a categoria. Exiba essa mensagem para uma instância de restaurante.

  • Crie uma classe chamada Cliente e pense em 4 atributos. Em seguida, instancie 3 objetos desta classe e atribua valores aos seus atributos através de um método construtor.

lista = input(f"Adicione uma lista de carro(s) com modelo, cor e ano, separandos por vírgula: ")
lista_tratada = lista.split(", ")

class Carro:
    lista =[]
    def __init__(self, modelo, cor, ano):
        self.modelo = modelo
        self.cor = cor
        self.ano = ano
        Carro.lista.append(self)

    def __str__(self):
        return f"Modelo: {self.modelo}\n -Cor: {self.cor}\n -Ano: {self.ano}\n"

def listar_carros():
        for i in range(0, len(lista_tratada), 3):
            modelo = (lista_tratada[i].strip()).title()
            cor = (lista_tratada[i+1].strip()).title()
            ano = (lista_tratada[i+2].strip())
            Carro(modelo, cor, ano)

listar_carros()

for carro in Carro.lista:
    print(carro)


#carro1 = Carro("Gol", "Prata", 1994)
#carro2 = Carro("Brasília", "amarela", 1979)
Adicione uma lista de carro(s) com modelo, cor e ano, separandos por vírgula: gol, prata, 1994, brasília, amarela, 1979
Modelo: Gol
 -Cor: Prata
 -Ano: 1994

Modelo: Brasília
 -Cor: Amarela
 -Ano: 1979

Restaurante

class Restaurante:
    def __init__(self, nome, categoria, petfriendly, capacidade, ativo=False):
        self.nome = nome
        self.categoria = categoria
        self.petfriendly = petfriendly
        self.capacidade = capacidade
        self.ativo = ativo
    
    def __str__(self):
        return f"Nome: {self.nome}\nCategoria: {self.categoria}\nAtivo: {self.ativo}\nPetfriendly: {self.petfriendly}\nCapacidade: {self.capacidade}"

restaurante1 = Restaurante('Sabores do Mundo', 'Internacional', petfriendly= True, capacidade=50, ativo= True)
restaurante2 = Restaurante('Trem Bão', 'Comida Mineira', petfriendly= True, capacidade=30, ativo= True)
restaurante3 = Restaurante('Churrascaria Gaúcha', 'Carnes', petfriendly= False, capacidade=100, ativo= False)

print(restaurante1)
print('---\n') 
print(restaurante2)
print('---\n')
print(restaurante3)
Nome: Sabores do Mundo
Categoria: Internacional
Ativo: True
Petfriendly: True
Capacidade: 50
---

Nome: Trem Bão
Categoria: Comida Mineira
Ativo: True
Petfriendly: True
Capacidade: 30
---

Nome: Churrascaria Gaúcha
Categoria: Carnes
Ativo: False
Petfriendly: False
Capacidade: 100

Cliente

class Cliente:
    def __init__(self, nome, aniversario, email, telefone, endereco):
        self.nome = nome
        self.aniversario = aniversario
        self.email = email
        self.telefone = telefone
        self.endereco = endereco

    def __str__(self):
        return f'Nome: {self.nome}\nAniversário: {self.aniversario}\nEmail: {self.email}\nTelefone: {self.telefone}\nEndereço: {self.endereco}'

cliente1 = Cliente('Ana Silva', '15/03', 'ana.silva@email.com', '(11) 98765-4321', 'Rua das Flores, 123 - São Paulo, SP')
cliente2 = Cliente('Bruno Costa', '22/07', 'bruno.c@email.com', '(21) 99123-4567', 'Av. Atlântica, 456 - Rio de Janeiro, RJ')
cliente3 = Cliente('Carla Santos', '01/11', 'carlinha@email.com', '(31) 97788-9900', 'Praça da Liberdade, 789 - Belo Horizonte, MG')
cliente4 = Cliente('Diego Oliveira', '10/04', 'diego.o@email.com', '(41) 98877-6655', 'Alameda das Rosas, 10 - Curitiba, PR')

print(cliente1)
print('---\n')
print(cliente2)
print('---\n')
print(cliente3)
print('---\n')
print(cliente4)
Nome: Ana Silva
Aniversário: 15/03
Email: ana.silva@email.com
Telefone: (11) 98765-4321
Endereço: Rua das Flores, 123 - São Paulo, SP
---

Nome: Bruno Costa
Aniversário: 22/07
Email: bruno.c@email.com
Telefone: (21) 99123-4567
Endereço: Av. Atlântica, 456 - Rio de Janeiro, RJ
---

Nome: Carla Santos
Aniversário: 01/11
Email: carlinha@email.com
Telefone: (31) 97788-9900
Endereço: Praça da Liberdade, 789 - Belo Horizonte, MG
---

Nome: Diego Oliveira
Aniversário: 10/04
Email: diego.o@email.com
Telefone: (41) 98877-6655
Endereço: Alameda das Rosas, 10 - Curitiba, PR
1 resposta

Oi, Carlos! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Gostei bastante da forma como você estruturou suas classes e utilizou o método especial __str__ pra apresentar os dados de forma organizada. Outro ponto interessante foi o uso da lista de entrada para criar vários objetos da classe Carro, o que mostra uma boa compreensão de instanciação de objetos e manipulação de dados.

A separação das responsabilidades entre as classes Carro, Restaurante e Cliente também mostra um bom entendimento da proposta da programação orientada a objetos.

Você pode usar o método especial __repr__, que pode ajudar a representar melhor um objeto quando ele aparece em listas ou durante depurações.


class Carro:

    def __init__(self, modelo, cor, ano):
        self.modelo = modelo
        self.cor = cor
        self.ano = ano

    def __repr__(self):
        return f"Carro(modelo='{self.modelo}', cor='{self.cor}', ano={self.ano})"

carro1 = Carro("Gol", "Prata", 1994)
print(carro1)

Neste exemplo, o método __repr__ mostra uma representação mais técnica do objeto, o que ajuda a entender rapidamente quais valores estão armazenados em cada atributo.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!