1
resposta

[Sugestão] Resolução:

class Musica:

    musicas = []
     
    def __init__(self, nome, artista):
        self.nome = nome
        self.artista = artista
        self.duracao = int(duracao)
        Musica.musicas.append(self)
     
    def __str__(self):
        texto = str(f'O nome da música é {self.nome}, do artista: {self.artista} e dura {self.duracao} segundos')
        return texto
         
    def listar_musicas():
    
        for musica in Musica.musicas:
        
            print(f'{musica.nome} | {musica.artista} | {musica.duracao}') 

lovewar = Musica('Love & War',  'Yellow Claw', 115) 

print(lovewar)

mrvain = Musica('Mr Vain', 'Culture Beat',  247)

print(mrvain)

Musica.listar_musicas()
1 resposta

Bom dia Gabriel! Tudo bem com você?

Meus parabéns pela resolução do código você está no caminho certo, continue com esse empenho e dedicação.

Analisando o seu código, notei que existem dois pequenos pontos de atenção que devem ser corrigidos. No método construtor (__init__) o argumento duracao não foi fornecido fazendo com que seja apresentado erro no momento da criação dos objetos de classe e no quando ocorre a tentativa de atribuição do atributo self.duracao. Para corrigir, basta adicionar o argumento duracao no método construtor da seguinte forma:

def __init__(self, nome, artista, duracao):

Já no método listar_musicas() está faltando o decorador @classmethod e o argumento cls para que ele se torne um método de classe, o método deve ficar da seguinte forma:

    @classmethod    
    def listar_musicas(cls):
        for musica in Musica.musicas:
            print(f'{musica.nome} | {musica.artista} | {musica.duracao}') 

Código completo com as correções aplicadas

class Musica:

    musicas = []
     
    def __init__(self, nome, artista, duracao):
        self.nome = nome
        self.artista = artista
        self.duracao = int(duracao)
        Musica.musicas.append(self)
     
    def __str__(self):
        texto = str(f'O nome da música é {self.nome}, do artista: {self.artista} e dura {self.duracao} segundos')
        return texto
    
    @classmethod	 
    def listar_musicas(cls):
    
        for musica in Musica.musicas:
        
            print(f'{musica.nome} | {musica.artista} | {musica.duracao}') 

lovewar = Musica('Love & War',  'Yellow Claw', 115) 

print(lovewar)

mrvain = Musica('Mr Vain', 'Culture Beat',  247)

print(mrvain)

Musica.listar_musicas()

Após realizar as modificações acima, salve o arquivo e execute-o novamente.

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!

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