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

Dúvida no Ex. 3 da Aula 12 - Métodos estáticos

Olá, quando digito : type(perfis[0]), o retorno é . chamada da função: perfis = Perfil_Vip.gerar_perfis("perfis.csv") type(perfis[0])

Segue meu arquivo models.py:

# -*- conding: UTF-8 -*-

class Perfil(object):

    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' %(self.nome, self.telefone, self.empresa)

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

    def obter_curtidas(self):
        return self.__curtidas

    @classmethod
    def gerar_perfis(classe, nome_arquivo):
        perfis = []
        arquivo = open(nome_arquivo, 'r')
        for linha in arquivo:
            valores = linha.split(',')
            perfis.append(classe(*valores))
        arquivo.close()
        return perfis


class Perfil_Vip(Perfil):
    def __init__(self, nome, telefone, empresa, apelido=''):
        super(Perfil_Vip, self).__init__(nome, telefone, empresa)
        self.apelido = apelido

    def obter_creditos(self):
        return super(Perfil_Vip, self).obter_curtidas() * 10.0
8 respostas

Não entendi a pergunta.

Você escreveu: def gerar_perfis(classe, nome_arquivo):

Tente a mudança abaixo e execute novamente: def gerar_perfis( nome_arquivo):

A pergunta que enviei não esta aparecendo. Quando eu digitava type(perfis[0]) não aparecia Perfil_Vip, apenas Perfil. Assim que pegar no Django novamente, passo os detalhes do erro.

Agora entendi. Só um detalhe, esse exercício independe do Django. É um exercício da Aula de Python. Você não precisa do Django para fazê-lo funcionar.

Vamos ao seu código, que aliás, está perfeito. Colei seu código dentro de uma arquivo models.py. Certo?

class Perfil(object):

    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' %(self.nome, self.telefone, self.empresa)

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

    def obter_curtidas(self):
        return self.__curtidas

    @classmethod
    def gerar_perfis(classe, nome_arquivo):
        perfis = []
        arquivo = open(nome_arquivo, 'r')
        for linha in arquivo:
            valores = linha.split(',')
            perfis.append(classe(*valores))
        arquivo.close()
        return perfis


class Perfil_Vip(Perfil):
    def __init__(self, nome, telefone, empresa, apelido=''):
        super(Perfil_Vip, self).__init__(nome, telefone, empresa)
        self.apelido = apelido

    def obter_creditos(self):
        return super(Perfil_Vip, self).obter_curtidas() * 10.0

Depois criei um arquivo chamado perfis.csv com este conteúdo:

Ana Gonçalves, 21-34345432, Amigas Ltda
Camila Almeida, 21-21215643, Auron Ltda

Foi no terminal e abri o console do python.:

>>> from models import Perfil, Perfil_Vip
>>> perfis = Perfil.gerar_perfis('perfis.csv')
>>> type(perfis[0])
<class 'models.Perfil'>
>>> perfis = Perfil_Vip.gerar_perfis('perfis.csv')
>>> type(perfis[0])
<class 'models.Perfil_Vip'>
>>>

Veja que funcionou perfeitamente. Quando chamo o método estático gerar_perfis da classe Perfil a lista gerada contém instâncias da classe Perfil.

Quando chamo o método estático gerar_perfis da classe Perfil_Vip a lista gerada contém instâncias da classe Perfil_Vip.

Veja, usei seu mesmo código e funcionou conforme o esperado.

Talvez, chuto eu, você esteja se confundindo na hora de rodar o código, não sei. Preciso que você verifique.

Abraço

Só uma dica: leia o que está escrito no quadrado formatação. Lá você terá uma dica básica de formatação para que seu código postado saia perfeitinho.

Tudo certo? Posso fechar esse Post?

Oi, vou ver isso amanhã. To enrolada pra entender o Django. Eu tava gerando o perfil VIP, mas na hora do type saia perfil.

Mas sua dúvida foi de um exercício do treinamento de Python não Django. Logo, sua dúvida é de Python.

solução!

Django é um framework que usa a linguagem Python. Sem conhecer Python fica impossível fazer qualquer coisa séria no Django. Inverter a ordem de aprendizagem tambem é prejudicial.