0
respostas

[Projeto] Meu Codigo Comentado (2)

class Musica:
    # “Toda vez que eu criar uma música, quero guardá-la em um lugar comum.”
    musicas = []

    # __init__ é chamado automaticamente quando você faz:

    # musica1 = Musica()

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

    # Musica.musicas.append(self):

    # Adiciona essa instância na lista da classe

    # É isso que permite listar todas depois

    # self representa o objeto que está sendo criado

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

musica1 = Musica()
musica1.nome = 'Bohemian Rhapsody'
musica1.artista = 'Queen'
musica1.duracao = 355

musica2 = Musica()
musica2.nome = 'Imagine'
musica2.artista = 'John Lennon'
musica2.duracao = 183

musica3 = Musica()
musica3.nome = 'Shape of You'
musica3.artista = 'Ed Sheeran'
musica3.duracao = 234

Musica.listar_musicas()


# Cada objeto criado é uma instância dessa classe

# Todas as instâncias são armazenadas em uma lista da própria classe

# Existe um método que lista todos os objetos criados

# Isso é um padrão comum em POO (Programação Orientada a Objetos) para simular um “banco de dados em memória”.

# Fluxo mental correto do código

# Pense assim:

# 1️⃣ A classe define o modelo
# 2️⃣ O __init__ cria objetos baseados nesse modelo
# 3️⃣ Cada objeto se registra automaticamente na lista da classe
# 4️⃣ Um método da classe percorre essa lista
# 5️⃣ Os dados são exibidos

# Resumo conceitual

# lass → molde

# __init__ → nascimento do objeto

# self → o próprio objeto

# atributo de instância → dado individual

# atributo de classe → dado compartilhado

# __str__ → representação textual

# método de classe → opera sobre o conjunto de objetos