Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

@staticmethod ou @classmethod

Olá, estava fazendo o curso e vi essas duas possibilidades (@staticmethod ou @classmethod) de criar métodos da classe.

Verifiquei que a diferença entre elas é que com o @classmethod consigo acessar os atributos da classe através da variável cls. Já com o @staticmethod eu consigo acessar os atributos da classe através da variável __ class __

Há alguma outra diferença entre elas?

Qual é a mais utilizada e por quê?

Segue um código de teste:

class MetodoEstatico:

    parametro = "Testando"

    @staticmethod
    def estatico():
        print(__class__.parametro)


class MetodoDeClasse:

    parametro = "Testando2"

    @classmethod
    def estatico(cls):
        print(cls.parametro)
2 respostas
solução!

Olá Thiago, tudo bem com você?

Peço desculpas pela demora em lhe responder.

Um método de classe (@classmethod) recebe como seu primeiro argumento uma classe (cls) ao invés de um objeto (self) e podem ser acessados diretamente pela classe, sem a necessidade de criarmos um objeto.

Já um método estático (@staticmethod), não receberá uma classe (cls) nem um objeto (self) como argumento, assim como no método de classe também podemos acessar esse método diretamente pela classe sem a necessidade de criarmos um objeto.

Uma diferença que temos entre os dois métodos será no comportamento no momento em que precisamos trabalhar com heranças, devido ao fato de o método estático não receber um atributo de referência de classe ou de objeto, o comportamento permanecerá como se o método pertencesse à classe mãe. O método de classe (@classmethod) será o ideal para trabalharmos quando temos herança de classes.

O uso @staticmethod deverá ser feito apenas quando o método for relacionado com a classe e não irá fazer interações com outras instâncias ou trabalhar com classes que possuem herança de classes.

Já no uso do @classmethod, termos preferência para quando um método deve fazer referência a classe em que foi invocado, como no caso de uma herança de classes.

Um exemplo de uso dos métodos, seria para aplicação em uma classe de contas bancárias onde será necessário sabermos quantas contas temos no total salvas, nesse caso não é necessário que os objetos (as contas bancárias) tenham acesso a esse método, assim faremos uso dos métodos estáticos ou de classes.

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Olá, Felippe. Tudo bem e com você?

Obrigado pelo esclarecimento. Ficou bem claro quando utilizar um e quando utilizar o outro.

Muito Obrigado!