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 ?
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 ?
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