@classmethod
def listar_musicas(cls):
for musica in cls.musicas:
print(f'{musica.nome} | {musica.artista} | {musica.duracao}')
Me foi apontado isso pesquisando um pouco sobre o codigo em sí, alg poderia me explicar?
@classmethod
def listar_musicas(cls):
for musica in cls.musicas:
print(f'{musica.nome} | {musica.artista} | {musica.duracao}')
Me foi apontado isso pesquisando um pouco sobre o codigo em sí, alg poderia me explicar?
Oii, Lucas. Como vai?
Excelente iniciativa pesquisar e ir além do que foi apresentado na atividade. É muito comum encontrar esse padrão em códigos Python e entendê-lo vai ajudar bastante na sua evolução na linguagem.
Vamos entender o que é o cls e o @classmethod.
**A diferença entre self e cls**
Para compreender o cls, precisamos lembrar do self:
self (próprio objeto): Quando usamos self, estamos nos referindo a uma instância específica. Por exemplo, se você criou uma música chamada "Under Pressure", o self acessa os dados apenas dessa música.cls (a classe): O cls refere-se à própria classe Musica, ou seja, ao molde que cria os objetos, e não a um objeto isolado.**O papel do @classmethod**
O decorador @classmethod sinaliza para o Python que aquele método pertence à classe, e não a uma instância individual.
Quando você define um método comum, o Python passa automaticamente o self como primeiro argumento. Quando você define um método de classe, o Python passa automaticamente a classe como primeiro argumento. Por convenção, chamamos esse argumento de cls.
Analisando o código
No trecho que você compartilhou:
@classmethod
def listar_musicas(cls):
for musica in cls.musicas:
print(f'{musica.nome} | {musica.artista} | {musica.duracao}')
O que tá acontecendo aqui é o seguinte:
cls, você tem acesso a atributos que pertencem à classe Musica como um todo, e não apenas a uma música específica.musicas (provavelmente definida logo no início da classe) onde todas as músicas criadas são armazenadas.for musica in cls.musicas diz: "Olhe para a classe Musica (cls), pegue a lista musicas que está nela e percorra cada item".Utilizamos essa abordagem quando precisamos de uma ação que envolve a estrutura geral (como listar todas as músicas cadastradas) e não uma ação individual (como tocar uma música específica).
Espero que essa explicação tenha esclarecido o uso desse recurso.