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

[Sugestão] Mão na massa: classe música

Para o seguinte exercício:

Em programação orientada a objetos (OO), uma classe é um modelo para criar objetos. Um objeto é uma instância específica de uma classe, e as classes são utilizadas para definir o comportamento e as propriedades compartilhadas por um grupo de objetos relacionados.

Por exemplo, uma classe Música poderia ter 3 atributos (que trazem as características ou propriedades de um objeto):

nome
artista
duracao

Agora é sua vez! Crie uma classe chamada Musica com os seguintes atributos e crie 3 objetos definindo cada atributo..

Eu solucionei da seguinte maneira:

class Musica:
    nome = ''
    artista = ''
    duracao = float(), ''

musica1 = Musica()
musica1.nome = 'Running with the Wolves'
musica1.artista = 'AURORA'
musica1.duracao = 3.39, 'minutos' # Tentei adicionar a descrição "minutos"
#porém, não sei se está certa ou se há uma forma mais eficaz

musica2 = Musica()
musica2.nome = 'Horse with no Name'
musica2.artista = 'America'
musica2.duracao = 4.11, 'minutos'

musica3 = Musica()
musica3.nome = 'Sirens'
musica3.artista = 'Ludwig Goransson'
musica3.duracao = 3.30, 'minutos'

print(vars(musica1), vars(musica2), vars(musica3))

Busco sugestões e formas para facilitar o código e evitar blocos grandes como esse que fiz (caso haja como)!
Abs!

1 resposta

Oi, Matheus. Tudo bem com você?

Seu exercício atende à proposta da atividade: você criou a classe Musica, instanciou três objetos e definiu nome, artista e duracao para cada um deles. A ideia de adicionar "minutos" também é válida como uma escolha de representação, mas existe um detalhe no seu código que vale observar: duracao = float(), '' cria uma tupla como atributo da classe, e depois você também está atribuindo tuplas aos objetos, como em musica1.duracao = 3.39, 'minutos'. Se a intenção for manter apenas a duração como número, poderia usar somente 3.39. Caso queira guardar a unidade junto, a tupla funciona, embora não seja necessariamente a forma mais prática.

Sobre evitar blocos grandes, um próximo passo interessante seria utilizar um __init__ na classe. Assim, os valores podem ser definidos no momento em que cada objeto é criado, evitando várias atribuições separadas. Por exemplo, Musica('Running with the Wolves', 'AURORA', 3.39) já poderia criar o objeto completo. Essa abordagem também deixa mais clara a diferença entre a classe, que funciona como modelo, e cada objeto, que possui seus próprios valores.

Como você organizaria o __init__ para conseguir criar essas três músicas com uma única linha para cada objeto?

Parabéns pelo exercício e por buscar formas de deixar o código mais enxuto. Continue compartilhando suas soluções e experimentações, o fórum fica à disposição para trocar ideias.

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