Menu
Coddy logo textTech

Variáveis de Instância vs de Classe

Parte da seção Object Oriented Programming do Journey de Python da Coddy — lição 13 de 64.

Variáveis de instância são exclusivas para cada objeto, enquanto variáveis de classe são compartilhadas por todos os objetos da mesma classe.

Aqui está um exemplo de uma classe com ambos os tipos de variáveis

class Student:
    # Variável de classe - compartilhada por todas as instâncias
    school = "Python High School"
    
    def __init__(self, name, grade):
        # Variáveis de instância - únicas para cada aluno
        self.name = name
        self.grade = grade

Crie objetos de estudante:

alice = Student("Alice", "A")
bob = Student("Bob", "B")

Acesse variáveis de instância (únicas para cada objeto):

print(alice.name)  # Alice
print(bob.name)    # Bob
print(alice.grade) # A
print(bob.grade)   # B

Acesse as variáveis de classe (compartilhadas por todos os objetos):

print(alice.school)     # Python High School
print(bob.school)       # Python High School
print(Student.school)   # Python High School

Agora altere a variável de classe:

Student.school = "Python Academy"

Veja como a alteração afeta todas as instâncias:

print(alice.school)   # Python Academy
print(bob.school)     # Python Academy

Saída:

Alice
Bob
A
B
Python High School
Python High School
Python High School
Python Academy
Python Academy

Você também pode criar variáveis de instância após a criação do objeto:

alice.age = 16  # Isso cria uma variável de instância
print(alice.age)  # 16
# print(bob.age)  # Isso causaria um erro - bob não tem age

Diferença Principal: Variáveis de instância (criadas com self.variable_name) são únicas para cada objeto, enquanto variáveis de classe (definidas diretamente na classe) são compartilhadas por todos os objetos. Alterar uma variável de classe afeta todas as instâncias.

challenge icon

Desafio

Fácil

Complete um sistema bancário.. Você definirá uma classe BankAccount em um arquivo e a usará em outro.

Você trabalhará com:

  • bank_account.py: Defina a classe BankAccount com atributos e métodos
  • driver.py: Importe a classe, crie contas e demonstre variáveis de classe

Siga os comentários TODO em ambos os arquivos para instruções passo a passo. Os comentários guiarão você na criação da classe com as variáveis e métodos adequados, e mostrarão como as variáveis de classe afetam todas as instâncias.

Folha de consulta

Variáveis de instância são exclusivas de cada objeto, enquanto variáveis de classe são compartilhadas por todos os objetos da mesma classe.

Classe com ambos os tipos de variáveis:

class Student:
    # Class variable - shared by all instances
    school = "Python High School"
    
    def __init__(self, name, grade):
        # Instance variables - unique to each student
        self.name = name
        self.grade = grade

Acessar variáveis de instância (exclusivas de cada objeto):

alice = Student("Alice", "A")
bob = Student("Bob", "B")
print(alice.name)  # Alice
print(bob.name)    # Bob

Acessar variáveis de classe (compartilhadas por todos os objetos):

print(alice.school)     # Python High School
print(bob.school)       # Python High School
print(Student.school)   # Python High School

Alterar variáveis de classe afeta todas as instâncias:

Student.school = "Python Academy"
print(alice.school)   # Python Academy
print(bob.school)     # Python Academy

Criar variáveis de instância após a criação do objeto:

alice.age = 16  # This creates an instance variable
print(alice.age)  # 16

Experimente você mesmo

# TODO: Importe a classe BankAccount de bank_account.py
from bank_account import BankAccount

# TODO: Crie duas contas com estes detalhes exatos:
# - account1: titular "Alice Smith" com saldo de $1000
# - account2: titular "Bob Jones" com saldo de $2000

# TODO: Chame display_info() para ambas as contas

# TODO: Altere a variável de classe interest_rate para 0.03 (3%)
# Use este formato: BankAccount.interest_rate = 0.03

# TODO: Imprima o texto "After interest rate change:"

# TODO: Chame display_info() para ambas as contas novamente para mostrar que ambas têm a nova taxa de juros
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Object Oriented Programming