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

Não consegui encontrar onde o código quebra?

Olá! Meu código está quebrando ao executar, mas não consegui entender onde está o problema. Seguindo as instruções da aula, o professor orienta a incluir uma super classe no construtor do Playlist, mas quando executo o código dá o seguinte erro:

"line 44, in init super.init(programas) TypeError: descriptor 'init' requires a 'super' object but received a 'list'" Segue meu código completo:

class programas:
    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.title()

    def __str__(self):
        return f'Nome: {self.nome}, ano de lançamento: {self.ano}, Número de curtidas: {self.likes} likes.'

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

    def __str__(self):
        return f'Nome: {self.nome}, ano de lançamento: {self.ano}, {self.duracao} minutos, Número de curtidas: {self.likes} likes.'

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

    def __str__(self):
        return f'Nome: {self.nome}, ano de lançamento: {self.ano}, {self.temporadas} temporadas, Número de curtidas: {self.likes} likes.'

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

    def tamanho(self):
        return len(self.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_likes()
vingadores.dar_likes()
vingadores.dar_likes()
vingadores.dar_likes()
atlanta.dar_likes()
atlanta.dar_likes()
atlanta.dar_likes()
tmep.dar_likes()
tmep.dar_likes()
demolidor.dar_likes()

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

for programas in playlist_fim_de_semana:
    print(programas)

Agradeço desde já Abraços

1 resposta
solução!

Olá Filipe, tudo bem?

O erro que você está recebendo ocorre porque na classe Playlist, você está tentando chamar o método init da superclasse list usando super.init(programas), mas o correto seria chamar o método usando super().init(programas).

O método super() retorna um objeto super que representa a classe pai da classe atual. Em seguida, você pode chamar o método init da classe pai usando a sintaxe super().init().

Portanto, para corrigir o erro, basta substituir a linha super.init(programas) por super().init(programas) na classe Playlist. Ficando assim:

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

    def tamanho(self):
        return len(self.programas)

Com essa correção, o seu código deve funcionar corretamente. Espero ter ajudado!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software