0Pricing
Python Academy · Aula

Atributos de instância e de classe

Diferencie dados específicos de cada objeto de dados compartilhados no nível da classe.

Atributos de instância e de classe é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Python Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Python Academy inclui 4 aulas no total.

Introdução

Entender a diferença entre atributos de instância e de classe evita erros sutis e permite um estado compartilhado eficiente.

Atributo de classe

class Dog: legs = 4 — legs é compartilhado por todas as instâncias. Acesse-o como Dog.legs ou dog.legs.
class Dog:
    legs = 4
print(Dog.legs)
print(Dog().legs)

Atributo de instância

self.name = name em __init__ é específico de cada instância. Cada Dog tem seu próprio name.
class Dog:
    def __init__(self, name):
        self.name = name
d1 = Dog('Rex')
d2 = Dog('Buddy')
print(d1.name, d2.name)

Ordem de busca de atributos

Python verifica primeiro o __dict__ da instância, depois o __dict__ da classe e, por fim, as classes base. Atributos de instância ocultam atributos de classe.
class C:
    x = 10
c = C()
c.x = 99  # instance shadows class attr
print(c.x)  # 99
print(C.x)  # 10

Armadilha dos atributos de classe mutáveis

class C: items = [] — ALL as instâncias compartilham a mesma lista. Adicionar algo a uma instância afeta todas!
class C:
    items = []
C.items.append(1)
print(C().items)  # [1] — shared!

Resolvendo a armadilha dos mutáveis

Mova a inicialização para __init__: def __init__(self): self.items = [] Cada instância recebe sua própria lista.
class C:
    def __init__(self):
        self.items = []
c1 = C(); c2 = C()
c1.items.append(1)
print(c1.items, c2.items)

Inspecionando __dict__

obj.__dict__ é o dicionário de atributos da instância. Class.__dict__ é o dicionário de atributos da classe.
class Dog:
    legs = 4
    def __init__(self, name): self.name = name
d = Dog('Rex')
print(d.__dict__)
print(Dog.__dict__.keys())

Métodos de classe como fábricas

@classmethod recebe cls (a classe) em vez de self. Use-o como uma alternativa aos construtores.
class Date:
    def __init__(self, y, m, d): self.y,self.m,self.d=y,m,d
    @classmethod
    def from_string(cls, s):
        y,m,d=map(int,s.split('-'))
        return cls(y,m,d)
dt=Date.from_string('2024-01-15')
print(dt.y,dt.m,dt.d)

Métodos estáticos

@staticmethod não tem self nem cls. Use-o para funções utilitárias agrupadas logicamente com uma classe, mas que não precisam da instância nem da classe.
class MathUtils:
    @staticmethod
    def add(a, b): return a + b
print(MathUtils.add(3, 4))

Rastreando instâncias com um atributo de classe

Um atributo de classe usado como counter registra quantas instâncias foram criadas.
class Widget:
    count = 0
    def __init__(self):
        Widget.count += 1
Widget(); Widget(); Widget()
print(Widget.count)

hasattr() e vars()

hasattr(obj, 'name') verifica se um atributo existe. vars(obj) equivale a obj.__dict__.
class P:
    def __init__(self, x): self.x = x
p = P(5)
print(hasattr(p, 'x'), hasattr(p, 'z'))
print(vars(p))

Verificação rápida

O que acontece quando você adiciona um item à lista de um atributo de classe mutável a partir de uma instância?

Recapitulação

Atributos de classe são compartilhados; atributos de instância pertencem a cada objeto. A busca na instância oculta a da classe. Inicialize valores mutáveis em __init__. @classmethod para métodos de fábrica.

Continue

Excelente! Continue para a próxima lição para aprofundar seus conhecimentos.

Perguntas Frequentes

A aula “Atributos de instância e de classe” é grátis?

Sim — o texto completo de “Atributos de instância e de classe” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Python Academy, atualize para CoddyKit PRO. O curso de Python Academy inclui 4 aulas no total.

O que vou aprender em “Atributos de instância e de classe”?

Diferencie dados específicos de cada objeto de dados compartilhados no nível da classe. Você pratica Python Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Python Academy?

Nenhuma experiência prévia é necessária. Python Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Atributos de instância e de classe”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Python Academy?

Sim. Cada aula de Python Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Classes e o método __init__
  2. Atributos de instância e de classe
  3. Métodos de instância e self
  4. Métodos mágicos: __str__ e __repr__
← Voltar para Python Academy