2
respostas

Por que a função media_avaliacoes deve ser uma @property?

Não compreendo o porque a função de média deve ser uma "property". Qual seria a diferença caso não fosse?

 @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
2 respostas

Tenho a mesma duvida...

As @property são funções que são acessadas como atributos das classes, quase como se tivesse declarado no init.

Elas são úteis quando você precisa de um tratamento para alguma propriedade da classe porém não precisa receber parâmetros, como no caso do cálculo da média que utiliza informações que a classe Restaurante já tem.

E também, para a média de avaliações, faz sentido o decorador @property, pois a média é um atributo do objeto restaurante, porém ela não é um valor fixo, ela deve ser calculada sempre com os valores atuais da soma de todas as notas recebidas dividida pela quantidade de avaliações. Então cada vez que essa propriedade for acessada ela é recalculada tendo a certeza de que está utilizando todas as avaliações recebidas.

Existe outros usos como acesso de propriedades protegidas (aquelas com o _ antes do nome).

Você pode ter mais detalhes nesse link: https://pythonacademy.com.br/blog/como-utilizar-property-no-python

Espero que tenha ajudado.

Um abraço