Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] O comando de property não funcionou.

Meu código está assim:

class Restaurante:
    restaurantes = []

    def __init__ (self, nome, categoria):
        self.nome = nome
        self.categoria = categoria  
        self._ativo = False
        Restaurante.restaurantes.append(self)

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


    def listar_restaurantes():
        for restaurante in Restaurante.restaurantes:
            print (f'{restaurante.nome} | {restaurante.categoria} | {restaurante._ativo}')
    @property
    def ativo(self):
        return '⌧' if self.ativo else '☐'


restaurante_praca = Restaurante('Praça', 'Gourmet')

restaurante_pizza = Restaurante('Pizza', 'Pizzaria')

Restaurante.listar_restaurantes()

O console retorna:

Praça | Gourmet | False
Pizza | Pizzaria | False 

O que há de errado? Está exatamente como na aula.

2 respostas
solução!

Bom dia Daniel! Tudo bem com você?

O comportamento apresentado está ocorrendo porque o método ativo não está sendo chamado corretamente dentro do método listar_restaurantes. Abaixo, explico os pontos que precisam ser corrigidos para que seu código funcione conforme esperado:

Correção no método listar_restaurantes:

  • No trecho do código onde você está imprimindo as informações dos restaurantes, você está acessando a propriedade _ativo diretamente, assim: restaurante._ativo. O correto seria acessar o método property ativo sem o underscore, da seguinte forma:
    print(f'{restaurante.nome} | {restaurante.categoria} | {restaurante.ativo}')
    
  • Isso garante que o método ativo seja executado, retornando o valor apropriado

Correção no método property ativo:

  • No código do método ativo, você deve garantir que está acessando o atributo _ativo diretamente, utilizando o underscore, para evitar uma chamada recursiva ao próprio método ativo. O código corrigido ficaria assim:
    return '⌧' if self._ativo else '☐'
    
  • Dessa forma, o método retorna os ícones corretos com base no estado do restaurante

Deixo um GIF abaixo mostrando a realização das correções listadas acima:

GIF apresentando a execução dos passos listados anteriormente

Após fazer essas alterações, lembre-se de salvar o arquivo antes de executá-lo novamente.

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!

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

Muito obrigado!! Consegui fazer funcionar com o code copilot mas nao tinha entendido a soluçao, obrigado mesmo.