🚀 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 indevido

Com 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:
    pass

Passo 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.00

Identidade

Cada objeto tem sua própria identidade na memória. Se você criar conta1 e conta2, elas serão instâncias independentes, mesmo que tenham os mesmos valores iniciais.

🚨 Erros Comuns

ErroCausaSolução
AttributeErrorTentar 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 definedEsquecer 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.


⬅️ Capítulo Anterior | Próximo Capítulo ➡️