1
resposta

Para que serve o property?

Fala galera, para que exatamente serve o property? Eu pensava que servia para não poder ser modificado diretamente. Mas ao instanciar o property ativo e alterar para True, funcionou normal. Então qual a necessidade de se usar property se pode ser modificado normalmente?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá, Fabio.

Tudo bem?

O @property é um decorador em Python que permite que você trate métodos como se fossem atributos. Isso é útil quando você quer controlar o acesso a um atributo, permitindo a leitura, mas não a modificação direta, ou quando você quer que o valor do atributo seja calculado dinamicamente.

Analisando o seu exemplo, o método ativo é decorado com @property, o que significa que ele pode ser acessado como um atributo, mas seu valor é calculado dinamicamente com base no valor de _ativo.

Quando você tenta fazer Restaurante.ativo = True, você está tentando modificar diretamente o método ativo, o que não é permitido porque ele não tem um setter definido. Para modificar o estado de _ativo, você deve usar o método alternar_estado:

restaurante_praca = Restaurante('Praça', 'Gourmet')
print(restaurante_praca.ativo)  # ☐
restaurante_praca.alternar_estado()
print(restaurante_praca.ativo)  # ⌧

Se você quiser permitir a modificação direta do atributo ativo, você pode definir um setter para ele:

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 '☐'

    @ativo.setter
    def ativo(self, valor):
        self._ativo = valor

Agora, você pode fazer:

restaurante_praca = Restaurante('Praça', 'Gourmet')
restaurante_praca.ativo = True
print(restaurante_praca.ativo)  # ⌧

Espero ter ajudado e bons estudos!