1
resposta

Praca 2.0 não aparece embora os codigo tenha sido escrito no progrmaa:

na parte em que sai de praca para praca 2.0, quando executa, não aparece praca 2.0 mas apenas praca.. segue codigo abaixo

class Restaurante:
    # Lista de restaurantes como variável de classe
    restaurantes = []

    def __init__(self, _nome, categoria):
        self.nome = _nome.title() #title se usa para colocar algum nome ou titulo em letra maiuscula!    
        self.categoria = categoria.upper() #upper, se usa para escrever toda palavra em maiusculo. 
        self._ativo = False
        Restaurante.restaurantes.append(self)  # Adiciona o restaurante à lista de restaurantes

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

    @classmethod
    def listar_restaurantes(cls):
        print(f'{'Nome do restaurante'.ljust(25)} | {'categoria'.ljust(25)} | {'Status'}')
        for restaurante in cls.restaurantes:
            print(f'{restaurante.nome.ljust(25)} | {restaurante.categoria.ljust(25)} | {restaurante.ativo}')

    @property
    def ativo(self):
        return '✅' if self._ativo else '❌'

    @ativo.setter
    def ativo(self, valor):
        self._ativo = valor

# Criando instâncias da classe Restaurante
restaurante_praca = Restaurante('Praça', 'Gourmet')
restaurante_praca._nome = 'Praça 2.0'
restaurante_pizza = Restaurante('Pizza Express', 'Italiana')

# Listando os restaurantes
Restaurante.listar_restaurantes()
1 resposta

Oi Mario! Tudo joia?

O problema está no fato de que você está tentando alterar o nome do restaurante diretamente através do atributo _nome, mas isso não reflete na listagem porque o método listar_restaurantes está acessando o atributo nome, que não foi alterado.

Vamos ajustar isso usando uma property para o atributo nome, similar ao que você fez com o atributo ativo. Isso garantirá que qualquer alteração no nome seja refletida corretamente. Aqui está como você pode fazer isso:

class Restaurante:
    # Lista de restaurantes como variável de classe
    restaurantes = []

    def __init__(self, nome, categoria):
        self._nome = nome.title()  # Usando title para capitalizar o nome
        self.categoria = categoria.upper()  # Usando upper para capitalizar a categoria
        self._ativo = False
        Restaurante.restaurantes.append(self)  # Adiciona o restaurante à lista de restaurantes

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

    @classmethod
    def listar_restaurantes(cls):
        print(f'{"Nome do restaurante".ljust(25)} | {"Categoria".ljust(25)} | {"Status"}')
        for restaurante in cls.restaurantes:
            print(f'{restaurante.nome.ljust(25)} | {restaurante.categoria.ljust(25)} | {restaurante.ativo}')

    @property
    def nome(self):
        return self._nome

    @nome.setter
    def nome(self, valor):
        self._nome = valor.title()

    @property
    def ativo(self):
        return '✅' if self._ativo else '❌'

    @ativo.setter
    def ativo(self, valor):
        self._ativo = valor

# Criando instâncias da classe Restaurante
restaurante_praca = Restaurante('Praça', 'Gourmet')
restaurante_praca.nome = 'Praça 2.0'  # Usando a property para alterar o nome
restaurante_pizza = Restaurante('Pizza Express', 'Italiana')

# Listando os restaurantes
Restaurante.listar_restaurantes()

Dessa forma, ao alterar restaurante_praca.nome, a mudança será refletida corretamente na listagem.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.