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

[Dúvida] Método `sanitiza_url` com `@classmethod` ou `@staticmethod`

Buenas!

Minha dúvida é sobre boas práticas de programação.

No caso, o método sanitiza_url não executa nenhuma operação com self. Minha dúvida é: já que o método não opera e nem depende do self, não seria melhor definí-lo como método estático ou método de classe? Há alguma contra-indicação em transformá-lo em método estático ou de classe? Ou é só questão de gosto mesmo?

Abraço!

2 respostas
solução!

Olá, como você está?

Peço desculpas pela demora em obter um retorno.

Não há contraindicação neste cenário, pois quando um método não depende do estado do objeto (self), ele pode, sim, ser definido como um método estático ou de classe. No entanto, a título de didática, visando simplificar o aprendizado, não foi utilizado um método estático ou de classe para este método.

Todavia, no caso específico do método sanitiza_url, ele poderia ser definido como um método estático sem efeitos colaterais no código. Para isso, basta adicionar o decorador @staticmethod acima da definição do método, como mostro abaixo:

class ExtratorURL:
    def __init__(self, url):
        self.url = ExtratorURL.sanitiza_url(url)
        self.valida_url()

    @staticmethod
    def sanitiza_url(url):
        if type(url) == str:
            return url.strip()
        else:
            return ""

Vale ressaltar que quando um método não precisa de nenhum atributo de instância para ser executado, podemos defini-lo como método estático. Já quando um método precisa de atributos de classe, mas não precisa de atributos de instância, podemos defini-lo como método de classe. Ou seja, a diferença entre os dois é que um método de classe recebe a classe como primeiro argumento (cls ao invés de self) e pode acessar ou modificar o estado da classe, enquanto um método estático não precisa de nenhum argumento específico e não pode acessar ou modificar o estado da classe.

Espero ter ajudado. Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

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

Olá, Felippe!

Tudo blz?

Muito obrigado pelo esclarecimento!

Abraço!