Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Playlist com dois atributos de tipos diferentes.

Na definição do inicializador da classe Playlist são definidos dois parâmetros que são atribuídos a dois atributos diferentes, 'nome' que seria uma string e 'programas' que seria uma lista.

Como que o 'for in' consegue saber que deve iterar o atributo que recebe a lista? E caso houvesse mais de uma lista, como selecionar qual deve ser iterada?

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


vingadores = Filme('vingadores - guerra infinita', 2018, 160)
atlanta = Serie('atlanta', 2018, 2)
tmep = Filme('Todo mundo em pânico', 1999, 100)
demolidor = Serie('Demolidor', 2016, 2)

vingadores.dar_like()
tmep.dar_like()
tmep.dar_like()
tmep.dar_like()
tmep.dar_like()
demolidor.dar_like()
demolidor.dar_like()
atlanta.dar_like()
atlanta.dar_like()
atlanta.dar_like()

filmes_e_series = [vingadores, atlanta, demolidor, tmep]
playlist_fim_de_semana = Playlist('fim de semana', filmes_e_series)

print(f'Tamanho da playlist: {len(playlist_fim_de_semana)}')

for programa_lista in playlist_fim_de_semana:
    print(programa_lista)
1 resposta
solução!

O segredo está no construtor da classe Playlist.

class Playlist(list): # <- Extende classe nativa `list`
    def __init__(self, nome, programas):
        self.nome = nome
        super().__init__(programas) # <- Chama o construtor de `list` passando o objeto iterável

Como a classe Playlist extende a classe list de Python, Playlist possui suporte a todos os métodos e operadores de uma lista normal.

playlist_fim_de_semana = Playlist('fim de semana', ['Domingo', 'Sabado'])
playlist_dias_uteis = Playlist('dias uteis', ['Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta'])

print(playlist_fim_de_semana + playlist_dias_uteis)
# ['Domingo', 'Sabado', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta']

print('Domingo' in playlist_fim_de_semana)
# True

E caso recebêssemos mais de uma lista no construtor, para escolhermos qual seria iterada pelo 'for in' basta passarmos a desejada no construtor da classe super.

class Playlist_programas(list):
    def __init__(self, nome, programas, anotacoes):
        self.nome = nome
        super().__init__(programas) # <- itera a lista `programas`

class Playlist_anotacoes(list):
    def __init__(self, nome, programas, anotacoes):
        self.nome = nome
        super().__init__(anotacoes) # <- itera a lista `anotacoes`