Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] 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'Música: {self.nome} | Artista: {self.artista} | Duração: {self.duracao}'
    
    def listar_musicas():
        for musica in Musica.musicas:
            print(f'{musica.nome} | {musica.artista} | {musica.duracao}')

musica1 = Musica('Bohemian Rhapsody', 'Queen', '5:55')
musica2 = Musica('Imagine', 'John Lennon', '3:03')

Musica.listar_musicas()
1 resposta
solução!

Oi, Thaís! Como vai?

Gostei da forma como você organizou a classe Musica e utilizou a lista musicas para armazenar as instâncias criadas. O método __str__ também ficou muito bem aplicado para deixar a exibição das informações mais legível. Sua implementação mostra um bom entendimento sobre construtores e atributos de classe em Python.

Uma dica interessante para o futuro é utilizar o decorator @classmethod em métodos que trabalham diretamente com atributos da classe. Isso deixa o código mais organizado e facilita a manutenção.


class Musica:
    musicas = []

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

Nesse exemplo, o cls representa a própria classe e permite acessar os atributos compartilhados entre todas as instâncias.

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