1
resposta

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

art = Musica('Val', 'Valinhos', 666)
Musica.listar_musicas()

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Oi, Luan! Como vai?

Com o que você descreveu, ficou bem legal a forma como você usou a lista de classe para armazenar as músicas. Um ponto que chamou atenção é o método __str___, que parece ter um underscore a mais — isso impede que o Python reconheça o método especial corretamente. Ajustando para __str__, tudo deve funcionar como esperado.

Uma dica interessante para o futuro é usar o método @classmethod para listar as músicas, o que torna o código mais flexível e claro. Veja este exemplo:


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

Esse código usa @classmethod para indicar que o método pertence à classe, e cls referencia a própria classe em vez de instâncias específicas.

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