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

List comprehension com __str__

Boa noite, como vão? Estava acompanhando a aula e tentei modificar o final, para que ao invés de declarar uma lista com as variáveis filme e série, e depois printar os itens dessa lista, fizesse tudo isso em uma única linha. Segue meu código abaixo.

class Programa:
    def __init__(self, nome, ano):
        print('Iniciando init programa')
        self._nome = nome.title()
        self.ano = ano
        self._likes = 0

    @property
    def likes(self):
        return self._likes

    def dar_likes(self):
        self._likes += 1

    @property
    def nome(self):
        return self._nome

    @nome.setter
    def nome(self, nome):
        self._nome = nome

    def __str__(self):
        return f'{self.nome} - {self.ano} - {self.likes} likes'


class Filme(Programa):
    def __init__(self, nome, ano, duracao):
        print('Iniciando init filme')
        super().__init__(nome,ano)
        self.duracao = duracao
        print('Fim init filme')

    def __str__(self):
        return f'{self.nome} - {self.ano} - {self.duracao} min - {self.likes} likes'

class Serie(Programa):
    def __init__(self, nome, ano, temporadas):
        super().__init__(nome,ano)
        self.temporadas = temporadas

    def __str__(self):
        return f'{self.nome} - {self.ano} - {self.temporadas} temporadas - {self.likes} likes'

vingadores = Filme('vingadores', 2018, 160)
atlanta = Serie('atlanta', 2018, 2)

lista = [vingadores, atlanta]

print('Tentativa com list comprehension - Não funcionou')
print(programa for programa in lista)

print('Tentativa normal')
for programa in lista:
    print(programa)

Por que consigo printar na tentativa normal, mas quando tento fazer a list comprehension ele imprime o local da memória?

2 respostas
solução!

Olá!

O list comprehension tem como retorno uma lista baseada na expressão informada. Sua sintaxe é:

[expressao_que_sera_repetida for item_da_lista in lista]

Uma alternativa para seu list compreension funcionar, seria:

print('Tentativa com list comprehension)
[print(programa) for programa in lista]
#Saída:
#Tentativa com list comprehension
#Vingadores - 2018 - 160 min - 0 likes
#Atlanta - 2018 - 2 temporadas - 0 likes

Obrigado, Douglas! Faz sentido!