🏗️ 9.2 Atributos e Métodos de Classe

🎯 Objetivo

Aprender a controlar informações que pertencem à Classe e não a um objeto específico, como contadores globais, utilizando atributos de classe e o decorador @staticmethod.

🏗️ O Conceito: Atributos de Classe

Diferente dos atributos de instância (que usam self), um atributo de classe é compartilhado por todos os objetos criados a partir dela. Se um objeto altera esse valor, todos os outros “enxergam” a mudança.

Quando usar?

  • Contar instâncias criadas.
  • Armazenar configurações globais da classe.
  • Definir constantes compartilhadas.

💻 Mão na Massa

Passo 1: Definindo o Atributo de Classe

No Python, definimos o atributo fora do __init__. Para incrementá-lo corretamente, devemos acessá-lo via nome da Classe (Conta._total_contas), garantindo que o valor seja alterado globalmente.

class Conta:
    # Atributo de Classe (Privado)
    _total_contas = 0
 
    def __init__(self, saldo: float):
        self._saldo = saldo
        # Incrementa o contador global da classe
        Conta._total_contas += 1
 
    @staticmethod
    def get_total_contas() -> int:
    """Método estático para acessar o contador sem precisar de uma instância."""
    return Conta._total_contas
 
## Passo 2: Executando o Teste

conta1 = Conta(100.0) conta2 = Conta(200.0)

Acessando via Classe (Recomendado)

print(f"Total de contas: {Conta.get_total_contas()}") # Resultado: 2
 
# Acessando via Instância (Também funciona)
print(f"Total via objeto: {conta1.get_total_contas()}") # Resultado: 2

✅ Resultado Esperado

O console exibirá o número total de contas criadas, demonstrando que o valor é mantido na classe e não reiniciado a cada novo objeto.

Métodos Estáticos

O decorador @staticmethod indica que o método não recebe a referência self. É ideal para utilitários que dependem apenas da classe ou de lógica lógica pura.

🚨 Erros Comuns

ErroCausaSolução
AttributeErrorTentar acessar self.total_contas esperando alterar o da classe.Use sempre NomeDaClasse.atributo para alterações globais.
TypeError: missing 'self'Esquecer o @staticmethod em métodos que não usam instâncias.Adicione o decorador @staticmethod no topo da função.

🔗 Próximo Capítulo

Agora que controlamos a classe, vamos aprender sobre Métodos de Classe vs Estáticos.


⬅️ Capítulo Anterior | Próximo Capítulo ➡️