Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Refatorando

class Musica:
musicas = []

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

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

def __str__(self):
    return f'{self.nome} | {self.artista} | {self.duracao}'

musica1 = Musica('californication','rhcp','5 min')
musica2 = Musica('Time','Pink FLoyd','8 min')

Musica.listar_musicas()

1 resposta

Olá, Bruno! Como vai?

Parabéns pela resolução da atividade!

Vi que você explorou a classe para estruturar músicas com Python, utilizou muito bem a lista estática para armazenar os objetos criados e ainda compreendeu a importância da método especial __str__ para exibir informações de forma legível.

Uma dica interessante para o futuro é transformar o método listar_musicas em um método de classe usando @classmethod. Assim:

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(musica)

    def __str__(self):
        return f'{self.nome} | {self.artista} | {self.duracao}'

Isso faz com que o método fique mais alinhado ao conceito de classe, usando cls em vez de referenciar diretamente Musica.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Uso de propriedades: aplicar @property para controlar leitura e escrita de atributos.
  • Separação de responsabilidades: manter métodos de exibição separados de lógica de negócio.
  • Encapsulamento: proteger atributos com convenções como _atributo quando não devem ser acessados diretamente.

Ah, uma pergunta: você acha que transformar listar_musicas em um método de classe deixa o código mais organizado e alinhado ao paradigma orientado a objetos ou prefere manter como função para maior clareza inicial?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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