2
respostas

classmethod x staticmethod

Professor, boa noite

Qual a diferença entre usar o classmethod e o static method?

Obrigado

2 respostas

Oi Thiago, um método de classe (classmethod) recebe a classe como primeiro argumento implícito, assim como um método de instância recebe a instância.

classe MinhaClasse:
    @classmethod
    def metodo (cls, arg1, arg2, ...): 
        #código aqui

Serve para definir um método que opera na classe e é chamado pela própria classe. Seu uso mais comum é em construtores alternativos.

Um método estático não recebe um primeiro argumento implícito. Para declarar um método estático, faça:

class MinhaClasse:
    @staticmethod
    def metodo(arg1, arg2, ...):
        #código aqui

É como uma função simples que reside no corpo de uma classe em vez de ser definida no nível do módulo.

Outra coisa é que o uso do @classmethod é mais útil quando usado em herança, já que a classe é levada em consideração. Alguns programadores questionam o uso do @staticmethod (por parecer não ter muita utilidade) e por este motivo é mais comum o uso do @classmethod.

Espero ter ajudado e bons estudos!

Entendi!! Como ficaria a chamada dessa classe?

Mais uma pergunta, o que seriam estes "construtores alternativos"?