Eu entendi cada um mas não consigo entender as diferenças exatas entre eles, além do argumento fixo "cls" que é necessário no método da classe.
Eu entendi cada um mas não consigo entender as diferenças exatas entre eles, além do argumento fixo "cls" que é necessário no método da classe.
Olá Diego! Tudo bom?
Os métodos estáticos e os métodos de classe são diferentes em relação ao seu comportamento e ao acesso aos atributos da classe.
Um método estático é aquele que não tem acesso aos atributos da classe e nem precisa de uma instância da classe para ser chamado. Ele é definido utilizando o decorador @staticmethod
. Um exemplo prático seria um método que realiza um cálculo matemático, como calcular a raiz quadrada de um número. Esse método não precisa acessar nenhum atributo da classe e pode ser chamado diretamente, sem a necessidade de criar uma instância da classe.
Já um método de classe é aquele que tem acesso aos atributos da classe, mas não precisa de uma instância específica da classe para ser chamado. Ele é definido utilizando o decorador @classmethod
e recebe como primeiro parâmetro o próprio objeto da classe, por convenção chamado de cls
. Um exemplo prático seria um método que retorna a quantidade total de instâncias criadas de uma classe. Esse método precisa acessar um atributo da classe que mantém o controle do número de instâncias criadas.
Portanto, a diferença principal entre os métodos estáticos e os métodos de classe está no acesso aos atributos da classe e na necessidade de criar uma instância da classe para chamá-los.
Gostaria de deixar como indicação o Discord de alunos e alunas, onde você pode estar interagindo e criando networking com outras pessoas que estudam aqui na Alura, compartilhando conhecimento e trocando experiências. Caso tenha interesse, deixo a seguir um link de convite para o Discord e o link de um vídeo ensinando como usá-lo.
Em caso de dúvidas, me coloco à disposição.
Grande abraço e bons estudos!
Entendi! Basicamente a diferença é no acesso aos atributos da classe e a necessidade ou não de uma instância da classe. Obg!!