1
resposta

Duvida no print do listar_restaurantes

porque quando alteramos o {restaurante.ativo}') para {restaurante._ativo}') ele não imprime os emojis inseridos?

  print(
                f'{restaurante._nome:<20} | {restaurante._categoria:<20} | {restaurante.ativo}')
1 resposta

Oi Bruno! Tudo joia?

O motivo pelo qual os emojis não são exibidos quando você altera {restaurante.ativo} para {restaurante._ativo} está relacionado ao uso de propriedades (property) no Python.

Quando você usa restaurante.ativo, está acessando a propriedade ativo, que provavelmente tem um método getter associado a ela. Esse método getter é responsável por retornar o valor formatado com os emojis.

Por outro lado, quando você acessa diretamente restaurante._ativo, está acessando o atributo privado _ativo da classe, que não passa pelo método getter e, portanto, não aplica a formatação com os emojis.

Para ilustrar, considere o seguinte exemplo:

class Restaurante:
    def __init__(self, nome, categoria):
        self._nome = nome
        self._categoria = categoria
        self._ativo = False

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

# Instanciando um restaurante
restaurante = Restaurante('Praça', 'Gourmet')

# Acessando a propriedade
print(restaurante.ativo)  # Saída: ❌

# Acessando diretamente o atributo privado
print(restaurante._ativo)  # Saída: False

No exemplo acima, quando acessamos restaurante.ativo, o método getter da propriedade ativo é chamado, retornando o emoji correspondente. Quando acessamos restaurante._ativo diretamente, obtemos o valor bruto False.

Portanto, para garantir que os emojis sejam exibidos corretamente, você deve continuar usando a propriedade ativo em vez de acessar diretamente o atributo _ativo:

print(f'{restaurante._nome:<20} | {restaurante._categoria:<20} | {restaurante.ativo}')

Espero ter ajudado e bons estudos!

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