Baixe o conteúdo do site em PDF: Apostila Python Progressivo
Dados públicos e privados
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).
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:
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.
Este comentário foi removido por um administrador do blog.
ResponderExcluire quando eu for precisar acessar realmente a senha ?
ResponderExcluirSomente 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.
Excluirutilize 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.
Excluir@property
def senha(self):
return self.__senha
@senha.setter
def senha(self , valor)
self.__senha = valor
Acesse assim.
Uma das opções é criar um método da classe Funcionário dedicado à mostrar a senha
Excluir