2
respostas

Mão na massa: refatorando uma função

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}')



jazz = Musica('Feeling Good', 'Nina Simone', 3)

bossa_nova = Musica('Garota de Ipanema', 'Tom Jobim', 4)

heavy_metal = Musica('Nothing Else Matters', 'Metallica', 6)

Musica.listar_musicas()
2 respostas

Oi, Marcia! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Sua organização na criação da classe Musica ficou bem clara, e o uso da lista de classe para armazenar as instâncias foi uma boa sacada. Isso ajuda bastante no controle dos objetos criados e facilita a listagem.

Uma dica interessante para o futuro é incluir o parâmetro self no método listar_musicas, caso ele vá evoluir para acessar atributos de instância. Veja este exemplo com um ajuste simples:



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

Esse código percorre a lista de músicas e imprime os dados de cada objeto Musica. Assim você mantém o padrão de métodos de instância.

Obs: Você tem um excelente gosto musical :)

Alura

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

O correto não deveria ser com cls como parâmetro, pra que ele não precisasse de instância, mas da classe para chamar??