Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Pequena dúvida com relação aos setters

Pelo que entendi, por meio de uma convenção entre os programadores, toda vez que um atributo começa com os dois underscores estamos mostrando que aquele atributo é privado e não deve ser modificado, correto?

Dito isso, já que com os setters esses atributos vão ser mexidos do mesmo jeito, pra que utilizamos eles? Não seria mais fácil só modificar o atributo diretamente? Ou o setter também seria uma convenção apenas para deixar bem claro que aquele atributo está sendo modificado?

Não sei se minha dúvida fez muito sentido haha

Obrigado já antecipadamente quem puder me responder... abs

2 respostas
solução!

Boa tarde Paulo, também tive dificuldade em entender isso de início.

A característica de publico e privado é se aquele atributo é modificado internamente pela classe

  • Privado

    def set_name(self, new_name):
        self.__name = new_name
  • Público

    >>> classe.name = <new_name>

Veja que no atributo público, você conseguiria alterá-lo pela linha de comando/console. E no caso privado, só chamando a função set_name(). Isso se chama encapsulamento

https://www.alura.com.br/artigos/o-que-e-encapsulamento

Indo um pouco além

Imagina uma função privada que acessa um banco de dados com os dados de um banco, por exemplo saldo. Essa função faz o controle de exceções e aplica o setter se respeitar as regras de negócio ( ter saldo bancário, ter feito depósito...) e tudo isso dentro de uma classe, de maneira privada.

Então é uma forma de esconder/encapsular as complexidades do seu código em forma de uma função.

Indo mais além 2

Se em uma IDE você tentar rodar classe._name ( isso mesmo, com um único " _ "), você consegue acessar esse atributo "privado", ele até aparece nas sugestôes de autocomplete, é só uma convenção.

Mas se você tiver um atributo com dois " _ ",

>>> classe.__name

esse atributo não aparece como sugestão. Por quê? O interpretador do python altera o nome da variável para não haver conflito com subclasses

https://towardsdatascience.com/whats-the-meaning-of-single-and-double-underscores-in-python-3d27d57d6bd1

Bons estudos!!

Nossa, show! Valeu demais!