1
resposta

O loop de print for programa in playlist_fim_de_semana está dando saída none

Seguindo o passo a passo estive implementando o duck typing, mas saída do loop for está dando como none. Qual pode estar sendo o problema no código abaixo?

class Programa:

    def __init__(self, nome, ano):
        self._nome = nome.title()
        self.ano = ano
        self._likes = 0

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

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

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

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

    def __str__(self):
        return f"Nome: {self.nome} - {self.ano} - {self.likes} 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} - Ano: {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} - Ano: {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):
        self._programas[item]

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


vingadores = Filme('Vingadores', 2018, 160)
atlanta = Serie('Atlanta', 2017, 2)
it = Filme('it', 2021, 180)
demolidor = Serie('demolidor', 2017, 2)

vingadores.dar_like()
demolidor.dar_like()
demolidor.dar_like()
vingadores.dar_like()
it.dar_like()
it.dar_like()
it.dar_like()
it.dar_like()
vingadores.dar_like()

filmes_e_series = [vingadores, atlanta, demolidor, it]

playlist_fim_de_semana = Playlist('fim de semana', filmes_e_series)

for programa in playlist_fim_de_semana:
    print(programa)

print(f'Tamanho do Playlist: {len(playlist_fim_de_semana)}')

print(f'Tá ou não? {demolidor in playlist_fim_de_semana}')

Saída no prompt:

None None None None Tamanho do Playlist: 4 Tá ou não? False

1 resposta

Olá Tatiane, tudo bem.

Você esqueceu apenas um detalhe, no método getitem, você returno um valor, conforme indicado a seguir.

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

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

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

Bom trabalho.