1
resposta

Proteger o atributo de classe

Como eu torno o atributo da classe privado, para que não seja alterado diretamente fora da classe ?

1 resposta

Olá Isabela, tudo bem com você?

No Python temos por convenção o uso do underscore ( _ ) antes do nome de um atributo ou método para deixá-los como privado (encapsulado). Deixo abaixo um código com o uso dos atributos privados.

class Conta:

    def __init__(self, numero, titular, saldo, limite):
        print("Construindo objeto...{}".format(self))
        self.__numero = numero
        self.__titular = titular
        self.__saldo = saldo
        self.__limite = limite


    def deposita(self,valor):
        self.__saldo += valor


    def saca(self,valor):
        self.__saldo -= valor


    def extrato(self):
        print("Saldo {} do titular {}".format(self.__saldo, self.__titular))

O encapsulamento tanto de métodos, quanto de atributos no Python, é um assunto que desperta diversas opiniões, isso por não ser algo obrigatório da linguagem - embora, seja extremamente importante definir a visibilidade de métodos e atributos quando se trabalha com orientação a objetos.

Também, é importante que não será possível invocar métodos que possuam duplo underscore fora da classe (através de objetos) e isso ocorre devido ao name mangling, que se trata de uma mudança no nome do método ou atributo para dificultar a leitura direta. Mas, reforço que apesar de dificultar, seu acesso não é impossível.

Para entender mais sobre atributos, métodos privados e até mesmo sobre name mangling, recomendo a leitura dos seguintes artigos - que estão em inglês, mas ao utilizar o recurso de tradução do próprio navegador, é possível compreender:

Em caso de dúvidas, encontro-me à disposição.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

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