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

Dúvida Aula 9 - Encapsulamento

O exemplo "r._Retangulo__area" mostra que é possível burlar o encapsulamento do atributo da classe, não?

Fiz o seguinte teste:

perfil1 = Perfil('Daniel', 123, 'Caelum') perfil1.curtir() print perfil1.obter_curtidas() 1 perfil1._Perfil__curtidas = 99999 print perfil1.obter_curtidas() 99999

2 respostas
solução!

são dois undercore's e não um, se tu coloca dois, o python randomiza o nome da variavel de forma a você não conseguir usa-la!

Olá,

Sim, e estão sendo usados dois underscores antes do nome do atributo: __area

Um underscore é usado antes do nome da classe ao referenciar o atributo: _Perfil__area

Segue o código completo:

-- coding: UTF-8 --

class Perfil(object): 'Classe padrão para perfis de usuários'

def init(self, nome, telefone, empresa): self.nome = nome self.telefone = telefone self.empresa = empresa self.__curtidas = 0

def imprimir(self): print 'Nome: %s, Telefone: %s, Empresa: %s, Curtidas: %s' %(self.nome, self.telefone, self.empresa, self.__curtidas)

def curtir(self): self.__curtidas+=1

def obter_curtidas(self): return self.__curtidas

perfil1 = Perfil('Daniel', 123, 'Caelum') perfil1.curtir() print perfil1.obter_curtidas() 1 perfil1._Perfil__curtidas = 99999 print perfil1.obter_curtidas() 99999