1
resposta

[Dúvida] [Projeto] Uso do (CLS)

@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?

1 resposta

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:

  1. Acesso à classe: Ao usar cls, você tem acesso a atributos que pertencem à classe Musica como um todo, e não apenas a uma música específica.
  2. Lista compartilhada: O código sugere que existe uma lista chamada musicas (provavelmente definida logo no início da classe) onde todas as músicas criadas são armazenadas.
  3. Iteração: O comando 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.

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