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}')
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}')
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!