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!