PythonPOOintermediario

Property e setter

Quando você precisa garantir que um atributo de objeto nunca receba um valor inválido, como um saldo negativo, o uso de @property e @setter é a solução. Em sistemas reais — contas bancárias, estoques, dados de sensores — você não quer que qualquer código altere diretamente um atributo crítico. Com @property, você mantém a sintaxe simples de atributo (objeto.atributo) enquanto adiciona validação e controle. Dominar isso evita bugs silenciosos e deixa o código mais robusto.

O PROBLEMA

Refatore ContaBancaria com @property e setter validando saldo >= 0.

EXEMPLO

c.saldo = -100 → ValueError

SOBRE O CONCEITO

O @property transforma um método em um atributo somente leitura. O @setter permite que você defina um método executado quando o atributo é modificado (objeto.atributo = novo_valor). O erro comum é criar um setter que apenas atribui o valor sem validação, como self.saldo = valor. Isso permite saldos negativos, quebrando a regra de negócio. Para corrigir, dentro do setter você verifica if valor < 0: raise ValueError('Saldo não pode ser negativo') e só então atribui a um atributo privado (ex.: self._saldo = valor). O uso de @property e @setter é permitido, assim como raise e ValueError, mas loops e herança são proibidos.

RESOLUÇÃO

Mais exercícios de POO

PYPOI2I · IntermediárioHerança simplesPYPOI5I · IntermediárioClasse abstrataPYPOO7B · BásicoMétodo estáticoPYPOO0B · BásicoObjetos como atributos
Ver todos os exercícios de Python