2
respostas

Pq usar setter em atributos privados

Se o atributo __ serve para torná-los privados, pq usar setter para modificá-los?

2 respostas

Se o atributo está como privado ( __ ), isso quer dizer que os mesmos estão encapsulados. Logo, para que possamos realizar qualquer tipo de modificação nos atributos, devemos usar métodos dentro da nossa classe (ou seja, usar o setter).

Se você não definir um método setter ou getter para acessar esse atributo, você não está seguindo os paradigmas da POO

Olá Gabriel, pense comigo, temos uma aplicação de banco, onde, obviamente, o saldo não pode ser acessível nem modificável a nenhum cliente do banco. Por isso o tornamos privado, pois imagine o caos que seria se todos podessem alterar livremente seus saldos não é mesmo? Segue um exemplo:

Class Cliente:
    def __init__(self, nome, id)
          self.__nome = nome
          self.__id = id
          self.saldo = 0
           # Note que o saldo é público

# Bom, depois de fazer os respectivos métodos `getters`, o banco resolveu publicar seu sistema e João um menino curioso, resolveu dar uma olhada. Quando viu que podia mudar seu saldo, ele imediatamente inseriu o comando:
João = Cliente("João", 73738)
João.saldo = 73829299237373838

Se fosse assim a economia mundial quebraria não é mesmo? Pois todos poderiam acessar todas as informações e alterá-las por um simples comando. Por isso quando estamos construindo uma aplicação, é sempre bom e uma boa prática deixar todas as variáveis privadas por um __, pois assim temos o controle do que o usuário pode ou não pode ver, acessar e modificar. No caso, se você estivesse fazendo um sistema bancário, você poderia criar um setter do nome, pois pessoas podem querer mudar suas identificações ou até mesmo o titular da conta, mas não para o saldo, pois isso a pessoa não pode simplesmente alterar. Fica a dica ;) Se te ajudei marque o tópico como solucionado :-D

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software