2
respostas

[Projeto] Solução pra listagem do código dos imoveis

Boa tarde, comunidade Alura!

Eu tô com um problema no meu projeto de aplicativo de listagem de imóveis; eu tô querendo que ele imprima o resultado do código que eu criei quando executado, mas o programa mostra que ele tá perdido na memória e eu não sei como fazer para exibi-lo. Alguém poderia me ajudar na solução, por gentileza?

Segue os códigos Python que eu criei até agora:

lista_imoveis.py

from modelos.codigo import Codigo

class Imovel:
    
    imoveis = []
    
    def __init__(self,endereco,cidade,bairro,numero,cep,complemento):
        self._endereco = endereco
        self._cidade = cidade
        self._bairro = bairro
        self._numero = numero
        self._cep = cep
        self._complemento = complemento
        self._ativo = False
        self._codigo = []
        Imovel.imoveis.append(self)

    def __str__(self):
        return f'{self._endereco} | {self._cidade} | {self._bairro} | {self._numero} | {self._cep} | {self._complemento} | {self._codigo}'

    @classmethod
    def listar_imoveis(cls):
        for imovel in cls.imoveis:
            print(f'Endereço: {imovel._endereco}')
            print(f'Cidade: {imovel._cidade}') 
            print(f'Bairro: {imovel._bairro}')
            print(f'Número: {imovel._numero}')
            print(f'CEP: {imovel._cep}')
            print(f'Complemento: {imovel._complemento}')
            print(f'Status: {imovel.ativo}\n')
            print(f'Código: {imovel._codigo}\n')

    @property
    def ativo(self):
        return 'disponivel pra venda' if self._ativo else 'indisponível'
    
    def alternar_status(self):
        self._ativo = not self._ativo

    def receber_codigo(self,local,num_codigo):
        codigo = Codigo(local,num_codigo)
        self._codigo.append(codigo)
        

codigo.py

class Codigo:
    def __init__(self,local,num_codigo):
        self._local = local
        self._num_codigo = num_codigo

app.py

from modelos.lista_imoveis import Imovel

import random

imovel_1 = Imovel('Avenida Novo Horizonte','Santo André','Vila Sacadura Cabral', 174 ,'09060820','apt1')
numero_aleatorio = random.randint(1,1000)
imovel_1.receber_codigo('São Paulo',numero_aleatorio)

def main():
    Imovel.listar_imoveis()

if __name__ == '__main__':
    main()
2 respostas

Boa noite, Davi! Executei seu código aqui e deu certo, velho. O retorno que tive:

Endereço: Avenida Novo Horizonte
Cidade: Santo André
Bairro: Vila Sacadura Cabral
Número: 174
CEP: 09060820
Complemento: apt1
Status: indisponível

Código: [<codigo.Codigo object at 0x0000021797FCBF40>]

Se você se refere a esse resultado: Código: [<codigo.Codigo object at 0x0000021797FCBF40>]

O que acontece, na sua classe Imovel tem o método receber_codigo, nele você tá criando um Codigo com base na outra classe que criou e tá dando um append no _codigo do seu objeto. como tá sendo o print de uma lista, o python usa o print default que é o endereço de memória.Nesse caso você poderia adicionar na sua classe Codigo:

    def __str__(self):
        return f'{self._local} | {self._num_codigo}'

e antes de printar o _codigo colocar alguma forma de concatenação dos registros com base no str criado:

def listar_imoveis(cls):
    for imovel in cls.imoveis:
        print(f'Endereço: {imovel._endereco}')
        print(f'Cidade: {imovel._cidade}') 
        print(f'Bairro: {imovel._bairro}')
        print(f'Número: {imovel._numero}')
        print(f'CEP: {imovel._cep}')
        print(f'Complemento: {imovel._complemento}')
        print(f'Status: {imovel._ativo}\n')
        codigos_string = ', '.join(str(codigo) for codigo in imovel._codigo) 
        print(f'Código: {codigos_string}\n')

dessa forma ele vai juntar eles por os códigos com ', ':

Código: São Paulo | 994, Rio de Janeiro | 525, Espírito Santo | 190

Espero ter conseguido ajudar, senão coloca mais detalhes ai do erro que tá recebendo.

Bom dia Job, tudo bem?

Primeiramente, obrigado pela resposta!

Era exatamente o problema do código que eu não conseguia resolver e o seu trecho me ajudou muito e deu certo!

Agora o único problema pra eu finalizar esse programa é armazenar o "número aleatório" do random na memória, pra quando eu for executar ele permaneça o mesmo