🚀 8.3 Classes e Objetos
🎯 Objetivo
Compreender a diferença fundamental entre uma Classe (projeto/planta) e um Objeto (instância real), e aprender a criar sua primeira classe no Python para proteger e organizar dados.
🏗️ O Conceito
Imagine que você está preparando um bolo. Você precisa de uma receita que define os ingredientes e o modo de preparo. O bolo final, que você pode comer, é o objeto concreto, enquanto a receita é a classe.
Outra analogia clássica:
- Classe: A planta de uma casa (o projeto).
- Objeto: A casa real construída a partir daquela planta. Podemos construir várias casas (objetos) a partir de uma única planta (classe).
Por que usar classes?
Sem classes, nossos dados ficam soltos. Por exemplo, poderíamos atribuir valores inválidos ao saldo de uma conta acidentalmente:
# Problema: Acesso direto e desprotegido
conta3['saldo'] = 100000000.0 # Erro de lógica
conta3['saldo'] = -3000.0 # Saldo negativo indevidoCom a Orientação a Objetos, protegemos os dados através de métodos, garantindo que o saldo só mude através de regras de negócio (saque/depósito).
💻 Mão na Massa
Passo 1: Criando uma Classe Vazia
Criar uma classe em Python é extremamente simples. Utilize a palavra-chave class em PascalCase.
# arquivo: conta.py
class Conta:
passPasso 2: Instanciando um Objeto
Agora, em outro arquivo (ou no console), vamos criar um objeto a partir dessa classe e verificar seu tipo.
from conta import Conta
# Criando a instância
minha_conta = Conta()
print(type(minha_conta))
# Saída: <class 'conta.Conta'>Passo 3: Atributos Dinâmicos
Como Python é uma linguagem dinâmica, podemos acrescentar atributos ao objeto em tempo de execução (embora a boa prática seja defini-los no construtor, que veremos adiante).
minha_conta.titular = "João"
minha_conta.saldo = 120.0
print(f"Titular: {minha_conta.titular}")
print(f"Saldo: R$ {minha_conta.saldo:.2f}")✅ Resultado Esperado
Ao executar o código, você verá a confirmação do tipo do objeto e os valores atribuídos:
<class 'conta.Conta'>
Titular: João
Saldo: R$ 120.00Identidade
Cada objeto tem sua própria identidade na memória. Se você criar
conta1econta2, elas serão instâncias independentes, mesmo que tenham os mesmos valores iniciais.
🚨 Erros Comuns
| Erro | Causa | Solução |
|---|---|---|
AttributeError | Tentar acessar um atributo que não foi criado. | Inicialize os atributos no método __init__ (veremos no próximo capítulo). |
NameError: Conta is not defined | Esquecer de importar a classe. | Use from arquivo import Classe. |
🔗 Próximo Capítulo
Agora que você sabe o que é um objeto, vamos aprender a usar o Construtor para automatizar a criação de atributos.