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 = gradeCrie 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) # BAcesse 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 SchoolAgora 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 AcademySaída:
Alice
Bob
A
B
Python High School
Python High School
Python High School
Python Academy
Python AcademyVocê 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 ageDiferenç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.
Desafio
FácilComplete 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 classeBankAccountcom atributos e métodosdriver.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 = gradeAcessar variáveis de instância (exclusivas de cada objeto):
alice = Student("Alice", "A")
bob = Student("Bob", "B")
print(alice.name) # Alice
print(bob.name) # BobAcessar 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 SchoolAlterar variáveis de classe afeta todas as instâncias:
Student.school = "Python Academy"
print(alice.school) # Python Academy
print(bob.school) # Python AcademyCriar variáveis de instância após a criação do objeto:
alice.age = 16 # This creates an instance variable
print(alice.age) # 16Experimente 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 jurosEsta 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
1Fundamentos de POO
Arquivos ExternosIntrodução à POOClasses vs ObjetosO Parâmetro selfMétodosAtributosMétodo Construtor (__init__)Recapitulação - Calculadora Simples4Herança
Herança BásicaA Função super()Sobrescrita de MétodoHerança MúltiplaOrdem de Resolução de MétodosRecapitulação - Hierarquia de Funcionários7Métodos Especiais
Introdução aos Métodos MágicosSobrecarga de OperadoresMétodos Mágicos de ContêinerRecapitulação - Lista Personalizada10Padrões de Projeto Parte 1
Introdução a Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão Strategy2Decoradores
Introdução aos DecoradoresDecorador de PropriedadeDecorador de Método EstáticoDecorador de Método de Classe5Polimorfismo
Sobrescrita de Método RevisitadaDuck TypingClasses e Métodos AbstratosDesign de InterfacesRecapitulação - Calculadora de Formas8Conceitos Avançados de POO
Composição vs HerançaMixinsMétodos Estáticos e de ClasseDecoradores de ClasseGerenciadores de Contexto11Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite3Propriedades de Classe
Variáveis de Instância vs de ClasseDecoradores de PropriedadeAtributos PrivadosRecapitulação - Gerenciador de Conta Bancária6Encapsulamento
Membros Públicos, Protegidos e PrivadosModificadores de AcessoOcultação de InformaçãoProperty Decorators AvançadosRecapitulação - Sistema de Registro de Alunos12Projeto: Gerenciamento de Biblioteca
Visão Geral do ProjetoClasses Livro e Usuário