1
resposta

Resolução do exercício

class Musica:
    musicas = []

    def __init__(self, nome, artista, duracao): 
        self.nome = nome
        self.artista = artista
        self.duracao = duracao
        Musica.musicas.append(self)

    def __str__(self):
        return f'{self.nome} | {self.artista} | {self.duracao}'
    
    def listar_musicas():
        for musica in Musica.musicas:
            print(f'{musica.nome} | {musica.artista} | {musica.duracao}')

musica1 = Musica('Bohemian Rhapsody', 'Queen', 355)
musica2 = Musica('Imagine', 'John Lennon', 183)
musica3 = Musica('Shape of You', 'Ed Sheeran', 234)

Musica.listar_musicas()
1 resposta

Oi, Brandon. Como vai?

Agradeço por compartilhar.

Seu código ficou bem organizado: o construtor __init__ recebe os dados da música, salva cada objeto na lista musicas e o método listar_musicas() percorre essa lista para exibir as informações. Também foi uma boa escolha usar __str__, porque ele ajuda a representar o objeto de forma mais legível quando for necessário imprimir uma música.

Uma dica interessante para o futuro é usar @classmethod quando o método trabalha com um atributo da própria classe, como musicas.


class Musica:
    musicas = []

    def __init__(self, nome, artista, duracao):
        self.nome = nome
        self.artista = artista
        self.duracao = duracao
        Musica.musicas.append(self)

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

Nesse caso, cls representa a classe Musica, deixando o método mais flexível para acessar a lista de músicas.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!