1
resposta

Porque usar property e setter

Consegui implementar o property e setter no meu codigo sem problemas mas não ficou claro para qual a diferença entra usar o property e o setter, alguem poderia me explicar ?

1 resposta

Olá Gabriel, tudo certo?

Esse assunto esta relacionado ao encapsulamento na programacao orientada a objetos. Sendo o encapsulamento um dos 3 pilares da programacao orientada a objetos, ao lado da herança e do polimorfismo, a sua principal funcao é proteger as propriedades de uma classe para que informacoes sigilosas nao sejam acessadas de forma indevida ou de forma direta. Alem da protecao o encapsulamento oferece algumas outras vantagens como manutenção de código e um desenvolvimento simplificado.

O conceito é praticamente é o mesmo para todas linguagens orientadas a objetos, o que varia é a sintaxe e forma de implementacao. Para implementa-lo, voce confere na declaracao dos atributos da classe o nivel de acesso privado. Para isso em Java voce usa a palavra reservada private. Em Python, no construtor, voce deve colocar dois underscores antes do nome da variavel. Exemplo: self.__nome. Dessa forma o Python entende que voce quer que este atributo seja privado. Porém, mesmo que ele entenda isso, diferentemente do Java, voce ainda consegue acessar o atributo fora da classe, por mais que esta nao seja uma pratica recomendada.

Depois disso para que o atributo utilizado fora da classe, voce deve implementar um metodo para acessa-lo (usualmente chamados de getter, do verbo get = obter) e outro para que voce consiga altera-lo (usualmente chamados de setter, do verbo set = definir). Em Python o decorator @property é analogo a um getter, e o @ nome.setter, como o proprio nome ja condiz, é analogo ao setter.

A recomendacao é que os atributos de uma classe sejam privados e que a implementacao dos getters e setters sejam feitos apenas em atributos que serao realmente requeridos fora da classe.

Caso queira ler mais sobre o encapsulamento recomendo estes links:

Não sei se consegui tirar a sua duvida, mas qualquer coisa pode perguntar. Abraços