Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Sugestão] métodos especiais e atributos

# 1) 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.

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

meu_carro = Carro(modelo= 'civic', cor= 'Prata', ano= '2010')


# 2) 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.

class Restaurante:
    def __init__(self, nome, categoria, ativo):
        self.nome = nome
        self.categoria = categoria
        self.ativo = False

restaurante_chines = Restaurante(nome='china', categoria='oriental', ativo= False)


# 3) 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.

class Restaurante:
    def __init__(self, nome, categoria, ativo):
        self.nome = nome
        self.categoria = categoria
        self.ativo = False

novo_restaurante = Restaurante(nome='Santa Marmita', categoria='Fast Food')

# 4) 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.


class Restaurante:
    def __init__(self, nome, categoria, ativo):
        self.nome = nome
        self.categoria = categoria
        self.ativo = False

    def __str__(self):
        return f'{self.nome}, {self.categoria}'

restaurante_formtado = Restaurante(nome='Bom Sabor', categoria='Tradicional')
print(restaurante_formtado)

# 5) 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.

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

cliente1 = Cliente(nome='Maria', idade=25, email='Mariacarmo@gmail.com', telefone='123-456-7890')
cliente2 = Cliente(nome='Bob', idade=30, email='bob@gmail.com', telefone='987-654-3210')
cliente3 = Cliente(nome='Charlie', idade=22, email='charlie@gmail.com', telefone='555-123-4567')
1 resposta

Olá Apollo.
Tudo bem?
Não foi você que lutou com o Rock(do filme)?
Parabéns por compartilhar sua resolução e por ter praticado os exercícios propostos.
É muito positivo ver você aplicando os conceitos de construtores, atributos e métodos especiais em Python.
Seu código demonstra que você compreendeu bem a criação de classes e a utilização do método __init__ para inicializar objetos. Além disso, a implementação do método __str__ no exercício 4 ficou correta e facilita bastante a visualização das informações do objeto.
Gostaria apenas de apontar alguns detalhes que podem ajudar no seu aprendizado:
No exercício 2, o enunciado pede os atributos nome, categoria, ativo e mais 2 atributos.
Na implementação atual foram definidos apenas os três primeiros.
Você poderia adicionar, por exemplo, endereco e telefone.
Nos exercícios 3 e 4, o construtor ainda recebe o parâmetro ativo, mas o enunciado sugere que ele seja iniciado automaticamente como False. Nesse caso, o construtor poderia ficar assim:

def __init__(self, nome, categoria):
    self.nome = nome
    self.categoria = categoria
    self.ativo = False

Ao criar as instâncias nos exercícios 3 e 4, você utiliza apenas nome e categoria, o que está alinhado com a proposta do exercício. Porém, com a definição atual do construtor, o código geraria um erro por faltar o argumento ativo.
No geral, sua solução mostra um bom entendimento dos conceitos fundamentais de Orientação a Objetos.
O mais importante é que você está praticando a modelagem de objetos e compreendendo como os atributos e métodos trabalham juntos para representar entidades do mundo real.
Continue explorando diferentes implementações e fazendo esses ajustes por conta própria.
Esse processo de identificar inconsistências entre o código e os requisitos é uma habilidade muito valiosa para o desenvolvimento de software.
Avise qualquer dúvida.
Bons estudos.