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.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!