🐍 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.