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

Ler uma lista com varias variáveis e arquivar num objeto cada uma

Estou lendo um arquivo de texto com varias "Pessoas" guardadas nele, porem quando entra no loop "for" para pegar as variáveis do arquivo e adicionar numa "list" de objetos pessoas.

def ler_todos():
    arquivo = busca_arquivo_pessoas("r")
    lista_pessoas = []
    pessoa_info = []

    # Identifica qual dos atributos da pessoa e adiciona numa lista
    # Quando chega em next ele adiciona no objeto pessoa e dar um pop() na informação

    for linha in arquivo:
        if linha.find("nome:") == 0:
            pessoa_info.append(linha.strip().lower().replace("nome:",""))

        elif linha.find("telefone:") == 0:
            pessoa_info.append(linha.strip().lower().replace("telefone:",""))

        elif linha.find("endereco:") == 0:
            pessoa_info.append(linha.strip().lower().replace("endereco:",""))

        elif linha.find("estado:") == 0:
            pessoa_info.append(linha.strip().lower().replace("estado:",""))

        elif linha.find("next" == 0):
            pessoa = Pessoa
            pessoa.setNome(pessoa, pessoa_info.pop(0))
            pessoa.setTelefone(pessoa, pessoa_info.pop(0))
            pessoa.setEndereco(pessoa, pessoa_info.pop(0))
            pessoa.setEstado(pessoa, pessoa_info.pop(0))
            lista_pessoas.append(pessoa)

    # Display no console lista de pessoas
    display_pessoas(lista_pessoas)        

Mesmo a "pessoa =Pessoa" só existindo dentro do "elif linha.find("next" == 0):", na próxima vez que o for é rodado e chega no "next" ele pega o mesmo endereço de memoria e esta sobrescrevendo a informação, quando termina o "for" e entra no "display_pessoas(lista_pessoas) ", como o objeto foi sobrescrito, ele o numero correto de pessoas que esta cadastrado, mas a informação de nome, telefone, endereço e estado, estão trazendo apenas a informação do ultimo registro.

Alguém tem alguma ideia de como fazer isso.

Obs: Se armazenar numa list ao invés de um objeto, ele funciona, e eu gostaria de fazer funcionar usando um objeto.

2 respostas
solução!

Olá, bom dia!

Você deve instanciar um objeto com parentese, mesmo se vc não utiliza parametros no construtor.

# pessoa = Pessoa -> fica:
pessoa = Pessoa()

Deu certo!! muito obrigado

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