Enviar um café pro programador

Atributos Privados - Escondendo Informações em Python

Neste tutorial simples e curto, vamos aprender como tornar um atributo de uma classe privado, ou seja, fazer com que ele fique 'escondido' do mundo exterior fora da classe.

Baixe o conteúdo do site em PDF: Apostila Python Progressivo

Dados públicos e privados

Vamos supor que você fez um sistema enorme, para uma multinacional.

Dentro da classe Funcionario tem um atributo chamado senha, com a senha de cada funcionário, para eles fazerem o login no sistema da empresa.

Porém, um hacker invadiu seu sistema: deu um print nesse atributo:

class Funcionario:
 def __init__(self):
  self.senha = 'senha'
  
gerente = Funcionario()
print("Senha do gerente:", gerente.senha)

Com isso, é possível ver que a senha do usuário é senha (assuma, você já usou essa senha super criativa).

Como tornar um atributo privado em Python


Ou seja, temos aí uma falha! O ideal seria que algumas informações de nossas classes e objetos não fossem públicas assim

Vamos consertar isso.

Atributo Privado: __atributo

Para tornar um atributo o mais privado possível, você deve adicionar antes do seu nome dois caracteres de underline.


Ou seja, se antes usávamos senha, agora vamos usar __senha
Veja o código e o que acontece quando tentamos acessar o atributo gerente.__senha agora:

Apostila de Python para download

Isso mesmo, vai dar um erro!
O Python diz pro hacker que o atributo __senha não existe no objeto!

Segurança em Python

É sempre bom definirmos variáveis privadas com dois underscores, pois isso mostra que aquele atributo é especial, ele não pode ser tratado por algo fora do objeto.

Ele deve ser acessado e modificado somente por métodos do próprio objeto.
Por exemplo, um funcionário não precisa e nem deve ter acesso ao atributo de salário de outros funcionários, isso é uma informação particular.

Quem deve acessar esse atributo, por exemplo, é o método que calcula o imposto de renda no contra-cheque, ou o que desconta o valor do plano de saúde, pois essas coisas são baseadas no salário.

Mais na frente, durante nosso curso de Python, vamos falar mais sobre segurança, hábitos e procedimentos que devemos tomar para fazer um código mais seguro, robusto e estável.

Isso vai fazer de você um programador bem diferenciado no mercado.
Obtenha aqui seu certificado para ser um profissional de Python.

5 comentários:

  1. Este comentário foi removido por um administrador do blog.

    ResponderExcluir
  2. e quando eu for precisar acessar realmente a senha ?

    ResponderExcluir
    Respostas
    1. Somente apenas pelos métodos 'get e set' de acesso (visível apenas aos membros da classe ou às classes filhas). Porém , o curioso é que python é muito diferente do que as palavras chave 'public' e private do C++ e Vala que aprendi.

      Excluir
    2. utilize as propriedades e o metodo que dará o retorno (protegendo) estes mesmos atributos em uma função. Lembrando que , se você utilizar o mecanismo de herança , apenas designado a única underline (_) , pois privados somente são acessíveis na própria classe.

      @property
      def senha(self):
      return self.__senha

      @senha.setter
      def senha(self , valor)
      self.__senha = valor


      Acesse assim.

      Excluir
    3. Uma das opções é criar um método da classe Funcionário dedicado à mostrar a senha

      Excluir