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

Dúvida - método classe filha

Amigos,

Não estou entendo o porque do erro abaixo, alguém poderia me dar uma ajuda.

vitor = Perfil_Normal('Vitor','nao informado','Tec')
mario = Perfil_Vip('Mario','nao informado','Tec')
 mario.set_id_vip()<br>
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "perfil.py", line 23, in set_id_vip
    self.__curtidas += 2
AttributeError: 'Perfil_Vip' object has no attribute '_Perfil_Vip__curtidas'

class Perfil_Normal(object):

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

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

    def get_id_normal(self):
        return self.__curtidas

class Perfil_Vip(Perfil_Normal):

    def __init__(self, nome, telefone, empresa):
        super(Perfil_Vip, self).__init__(nome, telefone, empresa)        

    def set_id_vip(self):
        self.__curtidas += 2

    def get_id_vip(self):
        return super(Perfil_Vip, self).get_id()
2 respostas
solução!

Sua classe filha não possui __curtidas, quem possui é a pai.

def set_id_vip(self):
        self.__curtidas += 2

Na explicação do capítulo forço o mesmo problema que você esta tendo, veja:

>>> vip.curtir()
>>> vip.curtir()
>>> vip.obter_creditos()
AttributeError: 'Perfil_Vip' object has no attribute '_Perfil_Vip__curtidas'

Parece que você mudou o nome de alguns métodos e se perdeu no percurso. (aliás, não entendi porque o método é set_id_vip se ele na verdade altera é curtida e não ID). Mas enfim, para resolver você precisa chamar um método na classe PAI.

Você fez isso aqui:

def get_id_vip(self):
        return super(Perfil_Vip, self).get_id()

Só fazer a mesma coisa para set_id_vip.

Professor Flavio,

Obrigado pela explicação. Eu estava com a lógica de que, quando chamar o perfil_vip ir no método perfil e acrescentar um +2 no id, de forma que ele se torne um id_vip. Mas na verdade quando chamo o construtor Perfil_VIP, já estou dizendo que aquele cara é um vip, ou seja, eu vou na classe pai, chamo o método ID, e automaticamente por ser um vip, ele vai na classe filha (vip) e atribui o valor que eu defini. Faço o mesmo para o get_id e retorna o id vip.

Vlwwwww

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