1
resposta

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

# class Musica:
#     nome = ''
#     artista = ''
#     duracao = int

class Musica:

    musicas = []

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

    def exibicao():

        for composicao in Musica.musicas:

            nome_formatado = composicao.nome.ljust(30)
            artista_formatado = composicao.artista.ljust(20)

            print(f"Nome: {nome_formatado} | Artista: {artista_formatado} | Duração: {composicao.duracao} segundos")
        
musica_1 = Musica("Construção", "Chico Buarque", 255)
musica_2 = Musica("Garota de Ipanema", "Tom Jobim", 243)
musica_3 = Musica("Bim Bom", "João Gilberto", 77)

Musica.exibicao()
1 resposta

Oi, Guilherme! Como vai?

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

Gostei da forma como você utilizou uma lista de classe para armazenar as instâncias, isso demonstra domínio da lógica orientada a objetos. Uma melhoria importante seria ajustar o método exibicao, pois ele está definido sem @staticmethod e sem o self, o que pode gerar erro ao rodar.

Uma dica interessante para o futuro é o uso do @staticmethod quando um método não precisa acessar atributos da instância. Veja este exemplo:


@staticmethod
def saudacao():
    print("Olá! Bem-vindo ao sistema de músicas.")

Esse código mostra uma mensagem sem depender de atributos do objeto. Use @staticmethod para funções que operam somente com dados da classe.

Qualquer dúvida que surgir, compartilhe no fórum. Abraços e bons estudos!

Alura

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