1
resposta

[Sugestão] Hora da prática: métodos especiais e atributos

#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():
    carros = []
    cor = ''
    modelo = ''
    ano = ''

carro_kwid = Carro()
carro_kwid.cor = 'Branco'
carro_kwid.modelo = 'Intense Pack Biton'
carro_kwid.ano = '2025'

print (f'Cor: {carro_kwid.cor} | Modelo: {carro_kwid.modelo} | Ano de fabricação: {carro_kwid.ano}')


#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.
#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.
#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):
        self.nome = nome
        self.categoria = categoria
        ativo = False
        fundacao = ''
        estado = ''
    def __str__(self):
        return f'{self.nome} | {self.categoria}'

#restaurante_Pizza_Place = Restaurante()
#restaurante_Pizza_Place
#restaurante_Pizza_Place.categoria = 'Italiana'
#restaurante_Pizza_Place.ativo = True
#restaurante_Pizza_Place.fundacao = '1999'
#restaurante_Pizza_Place.estado = 'MG'
restaurante_Pizza_Place = Restaurante('Pizza Place', 'Italiana')


#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():
    clientes = []
    def __init__ (self, nome, telefone, email, endereco):
        self.nome = nome
        self.telefone = telefone
        self.email = email
        self.endereco = endereco
        Cliente.clientes.append(self)

    def listar_clientes ():
        for cliente in Cliente.clientes:
            print(f'{cliente.nome} | {cliente.telefone} | {cliente.email} | {cliente.endereco}')

cliente_jose = Cliente('José', '31998663244', 'josecliente@gmail.com', 'numero: 155 rua: dos sonhos, bairro: minerais, Belo Horizonte')

Cliente.listar_clientes()
1 resposta

Oi, Gabriel! Tudo bem?

Parabéns pela elaboração do projeto! Deixo como sugestão apenas usar na classe Restaurante o self para os atributos ativo, fundacao e estado, o que é necessário para que eles sejam associados à instância do objeto, da seguinte forma:

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

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

restaurante_Pizza_Place = Restaurante('Pizza Place', 'Italiana')
print(restaurante_Pizza_Place)

Somao a isso na classe Cliente o método listar_clientes deve receber o parâmetro self se for um método de instância, ou pode ser declarado como @staticmethod se não precisar acessar atributos de instância, de acordo com o exemplo abaixo:

class Cliente():
    clientes = []

    def __init__(self, nome, telefone, email, endereco):
        self.nome = nome
        self.telefone = telefone
        self.email = email
        self.endereco = endereco
        Cliente.clientes.append(self)

    @staticmethod
    def listar_clientes():
        for cliente in Cliente.clientes:
            print(f'{cliente.nome} | {cliente.telefone} | {cliente.email} | {cliente.endereco}')

cliente_jose = Cliente('José', '31998663244', 'josecliente@gmail.com', 'numero: 155 rua: dos sonhos, bairro: minerais, Belo Horizonte')
Cliente.listar_clientes()

Espero ter ajudado!

Um forte abraço e bons estudos!