O Que É Um Atributo De Classe Em Python
Um atributo de classe em Python é uma variável definida diretamente dentro da definição da classe, compartilhada por todas as instâncias daquela classe, e esse conceito fundamental permite que você controle estados e comportamentos de forma organizada em programas complexos.
Definindo atributos de classe em Python
Quando você cria uma classe em Python, pode declarar variáveis dentro dela, mas fora de qualquer método; essas são exatamente as definições de atributo de classe. Diferentemente dos atributos de instância, que são criados dentro de __init__ e pertencem a um objeto específico, o atributo de classe existe independentemente de qualquer instância e, por padrão, é acessível tanto pela classe quanto por seus objetos.
Para definir um atributo de classe, basta escrever uma linha no corpo da classe, geralmente no topo, atribuindo um valor qualquer, como um número, string, lista ou até mesmo uma função estática. Exemplo simples:

class Carro:
fabricante = "Toyota" # atributo de classe
def __init__(self, modelo):
self.modelo = modelo # atributo de instância
Nesse trecho, fabricante é um atributo de classe, enquanto modelo é um atributo de instância. A principal vantagem de usar um atributo de classe é centralizar informações que são comuns a todos os objetos, evitando repetição e facilitando manutenções.
Como acessar e modificar atributos de classe
Você pode ler e alterar um atributo de classe de duas formas: pela própria classe ou por uma instância. Ao acessar via instância, o Python primeiro procura no objeto e, se não encontrar, busca na classe, o que garante flexibilidade sem surpresas.
- Acesso pela classe:
Carro.fabricante - Acesso pela instância:
meu_carro.fabricante - Modificação pela classe:
Carro.fabricante = "Honda"
Quando você modifica o atributo pela classe, a mudança reflete em todas as instâncias que não possuem uma cópia própria desse atributo. Se uma instância recebe um valor com o mesmo nome, ela cria uma cópia local que shadowa o da classe, o que pode ser útil, mas exige atenção para evitar bugs sutis de escopo.

Uso prático e vantagens de um atributo de classe
Os atributos de classe são ideais para armazenar configurações globais, constantes ou contadores que devem ser compartilhados entre instâncias. Por exemplo, em um sistema de cadastro, você pode usar um atributo de classe para controlar quantos objetos foram criados sem precisar de variáveis globais no módulo.
Exemplo com contador estático:
class Usuario:
total = 0
def __init__(self, nome):
self.nome = nome
Usuario.total += 1
@classmethod
def quantos(cls):
return cls.total
Note como total pertence à classe e é atualizado a cada nova instância. O uso de classmethod reforça a intenção de operar sobre dados da classe, não de uma instância específica, deixando a intenção do código mais clara para outros desenvolvedores.

Diferenças entre atributo de classe e atributo de instância
Embora pareçam similares, a distinção entre atributo de classe e atributo de instância é crucial para um bom projeto em Python. O atributo de instância é único para cada objeto, enquanto o de classe é compartilhado. Isso impacta diretamente na memória e na forma como os dados são atualizados.
Considere o caso de uma equipe de funcionários onde a sede é comum e o salário base pode ser um atributo de classe, enquanto o bônus individual é um atributo de instância. Assim, mudanças na política da empresa (como um aumento geral) podem ser feitas uma única vez no atributo de classe, refletindo em todos os objetos automaticamente.
Armadilhas comuns e boas práticas
Um erro frequente é tentar modificar um atributo de classe através de uma instância sem perceber que isso cria um atributo de instância sombreado. Para evitar confusões, prefira sempre modificar atributos de classe pela própria classe, especialmente quando o valor for compartilhado e a intenção for afetar todos os objetos.
Outra dica é usar nomes descritivos e, quando apropriado, encapsular a lógica de modificação com classmethod ou staticmethod. Isso deixa a intenção do código explícita e ajuda ferramentas de análise estática a entenderem melhor seu projeto, melhorando a manutenibilidade a longo prazo.
Conclusão sobre o que é um atributo de classe em Python
O atributo de classe em Python é uma ferramenta poderosa para definir propriedades compartilhadas entre instâncias de uma classe, promovendo reaproveitamento de código e centralização de configurações. Quando usado com consciência, ele simplifica a estrutura do programa e evita redundâncias, mas exige atenção para a diferença entre escopo de classe e escopo de instância. Dominar esse conceito é um passo essencial para escrever código Python mais limpo, previsível e escalável.
Atributos de Classe - Python Orientado a Objetos - Aula 39
Continuando com a Programação Orientada a Objetos em Python, hoje vamos falar um pouco mais sobre os atributos (variáveis) ...