Olá, Marcio.
Sim, você entendeu corretamente! Vamos esclarecer alguns pontos para reforçar o conceito:
Uso de @property
Quando você utiliza o decorador @property
em um método de uma classe, você transforma aquele método em um "atributo calculado". Isso significa que você pode acessar o resultado do método como se fosse um atributo, sem a necessidade de usar parênteses.
Sem @property
# Sem o @property, você precisa chamar o método com parênteses
print(restaurante_praca.media_avaliacoes())
Com @property
# Com o @property, você acessa o método como um atributo, sem parênteses
print(restaurante_praca.media_avaliacoes)
Benefícios de Usar @property
- Legibilidade: O código fica mais intuitivo e legível, já que você acessa o método como se fosse um atributo.
- Encapsulamento: Permite calcular o valor de um atributo dinamicamente, mas ainda oferece a aparência de um atributo simples.
Exemplo Completo
Aqui está um exemplo completo para ilustrar:
class Restaurante:
def __init__(self, nome, categoria):
self.nome = nome
self.categoria = categoria
self._avaliacao = []
def receber_avaliacao(self, cliente, nota):
avaliacao = Avaliacao(cliente, nota)
self._avaliacao.append(avaliacao)
@property
def media_avaliacoes(self):
if not self._avaliacao:
return 0
soma_das_notas = sum(avaliacao._nota for avaliacao in self._avaliacao)
quantidade_de_notas = len(self._avaliacao)
media = round(soma_das_notas / quantidade_de_notas, 1)
return media
class Avaliacao:
def __init__(self, cliente, nota):
self._cliente = cliente
self._nota = nota
# Exemplo de uso
restaurante_praca = Restaurante('Praça', 'Gourmet')
restaurante_praca.receber_avaliacao('Gui', 10)
restaurante_praca.receber_avaliacao('Lais', 8)
restaurante_praca.receber_avaliacao('Emy', 5)
# Usando o @property, acessa-se como um atributo
print(restaurante_praca.media_avaliacoes) # Sem parênteses
# Saída esperada: 7.7
Resumo
- Com
@property
: Acesse como um atributo (sem parênteses). - Sem
@property
: Chame como um método (com parênteses).
Sua observação está correta: utilizar @property
é uma boa prática porque melhora a legibilidade do código e mantém o princípio de encapsulamento.
Espero que isso tenha esclarecido suas dúvidas! Se tiver mais perguntas, sinta-se à vontade para perguntar.
Bons estudos!