Atributos de Classe vs. Atributos de Instância

🐍 Atributos de Classe vs. Atributos de Instância no Python

Na programação orientada a objetos em Python, entender a diferença entre atributos de classe e atributos de instância é fundamental para escrever código organizado, reutilizável e previsível.

Uma classe define um novo tipo de objeto e seus atributos podem pertencer à própria classe ou a cada instância criada a partir dela.

🔎 Atributos de Classe

São definidos diretamente no corpo da classe e são compartilhados por todas as instâncias.

Exemplo:

class Pessoa:
    especie = "Humano"

Nesse caso, especie pertence à classe. Todas as instâncias terão acesso ao mesmo valor. Se o atributo for alterado na classe, a mudança será refletida em todas as instâncias (desde que não tenham sobrescrito o valor).

São ideais para representar informações comuns a todos os objetos.

📌 Principais características:

  • 🔹 Compartilhados entre todas as instâncias
  • 🔹 Definidos no corpo da classe
  • 🔹 Economizam memória quando o valor é comum

📦 Atributos de Instância

São definidos normalmente dentro do método __init__, utilizando self. Cada objeto criado terá sua própria cópia desses atributos.

Exemplo:

class Pessoa:
    def __init__(self, nome):
        self.nome = nome

Aqui, nome é exclusivo de cada objeto. Cada instância pode armazenar valores diferentes.

São ideais para representar dados específicos de cada objeto.

📌 Principais características:

  • 🔹 Exclusivos de cada instância
  • 🔹 Definidos geralmente no método __init__
  • 🔹 Permitem personalização de cada objeto

⚙️ Aspecto Importante

No processo de busca de atributos (attribute lookup), o Python verifica primeiro os atributos da instância e depois os da classe.

Isso significa que um atributo de instância com o mesmo nome de um atributo de classe irá "sobrescrever" o valor da classe apenas para aquela instância específica, sem alterar o valor original da classe.

🎯 Conclusão

Compreender a diferença entre atributos de classe e de instância evita comportamentos inesperados e melhora a modelagem orientada a objetos. Dominar esse conceito é essencial para escrever códigos mais limpos, eficientes e profissionais em Python.

Voltar para Postagens Python / Django Ver no LinkedIn