Métodos Estáticos

Os métodos estáticos são uma funcionalidade poderosa nas linguagens de programação orientada a objetos, incluindo Python. Ao contrário dos métodos de instância e de classe, os métodos estáticos não têm acesso à instância da classe (self) nem à própria classe (cls). Em vez disso, eles agem como funções normais que estão agrupadas dentro de uma classe, o que ajuda a organizar o código de forma mais coesa.

Definição de um Método Estático

Um método estático é definido com o decorador @staticmethod antes da função. Aqui está um exemplo básico:

class Calculadora:
    # Método estático para adicionar dois números
    @staticmethod
    def adicionar(a, b):
        return a + b

Neste exemplo, adicionar é um método estático que retorna a soma de a e b. Para chamar este método, não precisamos de criar uma instância da classe Calculadora.

Chamadas a Métodos Estáticos

Podemos chamar um método estático diretamente pela classe, como mostra o exemplo abaixo:

resultado = Calculadora.adicionar(5, 3)
print(resultado)  # Saída: 8

Quando Usar Métodos Estáticos

Os métodos estáticos são ideais para algoritmos de utilidade que não necessitam de aceder a qualquer propriedade ou método de instância e que não dependem do estado da classe. Por exemplo, operações matemáticas são um caso de uso comum.

Exemplo Prático: Conversões de Unidade

Vamos construir uma classe Conversor, que irá conter vários métodos estáticos para conversões de unidade.

class Conversor:
    @staticmethod
    def celsius_para_fahrenheit(celsius):
        return (celsius * 9/5) + 32

    @staticmethod
    def quilometros_para_milhas(quilometros):
        return quilometros * 0.621371

# Uso dos métodos estáticos
temperatura_em_fahrenheit = Conversor.celsius_para_fahrenheit(25)
distancia_em_milhas = Conversor.quilometros_para_milhas(10)

print(f"25°C em Fahrenheit: {temperatura_em_fahrenheit}")  # Saída: 77.0
print(f"10 km em milhas: {distancia_em_milhas}")  # Saída: 6.21371

Comparação com Métodos de Classe e de Instância

É importante entender quando utilizar métodos estáticos ao invés de métodos de classe ou de instância:

  • Métodos de Instância são usados quando precisamos de modificar ou utilizar dados específicos da instância.
  • Métodos de Classe são usados quando precisamos de modificar ou utilizar dados da própria classe.
  • Métodos Estáticos são usados para funções que não dependem de instância ou classe, mas fazem sentido estarem dentro da classe por uma questão de organização.

Resumo

Os métodos estáticos são ferramentas úteis para construir funcionalidades que estão logicamente relacionadas com uma classe, mas que não dependem de instâncias dela. Usá-los apropriadamente pode ajudar a mantar o seu código mais organizado e modular.

Quiz

  1. O que distingue um método estático de um método de instância?

    • a) Um método estático pode aceder às variáveis de instância
    • b) Um método estático não pode aceder a self nem a cls
    • c) Um método estático é sempre chamado através da instância
    • d) Um método estático pode modificar o estado do objeto
  2. Qual dos seguintes é um cenário apropriado para usar um método estático?

    • a) Alterar um atributo de uma instância
    • b) Criar um novo objeto da classe
    • c) Validar um valor dado sem alterar o estado de qualquer objeto
    • d) Aceder a atributos da classe
  3. Como se define um método estático em Python?

    • a) Usando o decorador @classmethod
    • b) Usando o decorador @staticmethod
    • c) Usando a palavra-chave static function
    • d) Nenhuma das anteriores
  4. Como se chama um método estático?

    • a) Chama-se a partir de uma instância da classe
    • b) Chama-se utilizando self.method()
    • c) Chama-se diretamente pela classe
    • d) Só pode ser chamado dentro de outros métodos da classe

Respostas ao Quiz:

  1. b
  2. c
  3. b
  4. c
<< Métodos de Classe Índice Atividade Prática: Implem... >>