1
resposta

Não está imprimindo itens da playlist

class Programa:
    def __init__(self, nome, ano):
        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, novo_nome):
        self._nome = novo_nome.tittle()

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


class Filme(Programa):

    def __init__(self, nome, ano, duracao):
        super().__init__(nome, ano)
        self.duracao = duracao

    def __str__(self):
        return f'Nome: {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'Nome: {self.nome} - {self.ano} - {self.temporadas} temporadas - {self.likes} Likes'


class Playlist:

    def __init__(self, nome, programas):
        self.nome = nome
        self._programas = programas

    def __getitem__(self, item):
        return self._programas[item]

    @property
    def __len__(self):
        return len(self._programas)

    # @property
    # def listagem(self):
    #     return self._programas


vingadores = Filme('vingadores - guerra infinita', 2018, 160)
atlanta = Serie('atlanta', 2018, 2)
la_casa_de_papel = Serie('la casa de papel', 2018, 3)
todo_mundo_em_panico = Filme('todo mundo em pânico', 1999, 100)

vingadores.dar_likes()
atlanta.dar_likes()
atlanta.dar_likes()
atlanta.dar_likes()
vingadores.dar_likes()
la_casa_de_papel.dar_likes()
la_casa_de_papel.dar_likes()
la_casa_de_papel.dar_likes()
todo_mundo_em_panico.dar_likes()

filmes_e_series = [vingadores, atlanta, la_casa_de_papel, todo_mundo_em_panico]
minha_playlist = Playlist('fim de semana', filmes_e_series)

for programa in minha_playlist:
    print(programa)

print(f'Tamanho da Playlist: {len(minha_playlist.listagem)}')
print(f'Tá ou não tá? {la_casa_de_papel in minha_playlist}')

AttributeError: 'Playlist' object has no attribute 'listagem'

Bem, eu deixei o método "listagem" como comentário propositalmente. Na explicação, sugere-se para apagarmos os métodos "listagem" e "tamanho", porém, quando apagamos a propriedade "listagem", não imprime os itens da minha playlist. Se eu tiro o método "listagem" como comentário, meu código funciona. Inclusive o próprio arquivo do projeto final está com erro.

1 resposta

Olá Emidio, tudo bem com você?

Peço desculpas pela demora no retorno.

O erro de atributo apresentado (AttributeError) foi levantado devido ao uso do método listagem no momento em que a função len() foi instanciada, como o método foi comentado (não existe na classe devido está comentando), devemos remover a chamada desse método, assim o penúltimo print do projeto deve ficar conforme abaixo

print(f'Tamanho da Playlist: {len(minha_playlist)}')

Após realizarmos essa mudança será necessário realizarmos uma segunda mudança. Quando fazemos o uso do método mágico __len__ não fazemos o uso do decorator @property, será necessário removermos esse decorador do método presente no arquivo.

Com isso o método __len__ responsável por retornar o comprimento da lista funcionará corretamente, o método ficará conforme abaixo.

def __len__(self):
    return len(self._programas)

Após realizarmos essas mudanças, basta salvar o arquivo e executá-lo, obteremos o seguinte resultado.

Resultado

Nome: Vingadores - Guerra Infinita - 2018 - 160 min - 2 Likes
Nome: Atlanta - 2018 - 2 temporadas - 3 Likes
Nome: La Casa De Papel - 2018 - 3 temporadas - 3 Likes
Nome: Todo Mundo Em Pânico - 1999 - 100 min - 1 Likes
Tamanho da Playlist: 4
Tá ou não tá? True

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!