Agora que você já entende o que é um objeto e que tudo em Python vem de uma classe, chegou a hora de aprender a criar as suas próprias classes.

Este é o passo mais importante para entrar de verdade na Programação Orientada a Objetos (POO).
Hoje você vai aprender:

  • O que é uma classe criada por você
  • O que é o método especial __init__
  • Como criar atributos
  • Como criar métodos
  • Como criar vários objetos diferentes da mesma classe
  • Exemplos práticos e simples

Vamos começar! 

Como criar uma classe em Python

Em Python, uma classe é criada com a palavra-chave class:

class Pessoa:
    pass

O pass significa “não tem nada aqui ainda”.
Vamos melhorar isso.

O método __init__ — o Construtor

Toda vez que você cria um objeto, Python chama automaticamente um método especial chamado:

__init__

Ele é responsável por inicializar o objeto.

Exemplo:

class Pessoa:
    def __init__(self, nome, idade):
        self.nome = nome
        self.idade = idade

O que está acontecendo aqui?

  • self → representa o próprio objeto

  • self.nome → cria um atributo chamado nome

  • self.idade → cria um atributo chamado idade

Criando um Objeto (Instância)

p1 = Pessoa("João", 25)
p2 = Pessoa("Maria", 30)

print(p1.nome)   # João
print(p2.idade)  # 30

Cada objeto tem seus próprios atributos:

p1.nome = "João"
p2.nome = "Maria"

Ou seja, objetos diferentes → valores diferentes.

Criando métodos dentro da classe

Métodos são funções dentro da classe que operam sobre o objeto.

Vamos adicionar um:

class Pessoa:
    def __init__(self, nome, idade):
        self.nome = nome
        self.idade = idade

    def apresentar(self):
        print(f"Olá! Meu nome é {self.nome} e tenho {self.idade} anos.")

Agora:

p1 = Pessoa("João", 25) p1.apresentar()

Saída:

Olá! Meu nome é João e tenho 25 anos.

Exemplo muito prático: Classe Conta Bancária

Este exemplo é extremamente útil no mundo real.

class ContaBancaria:
    def __init__(self, titular, saldo=0):
        self.titular = titular
        self.saldo = saldo
    
    def depositar(self, valor):
        self.saldo += valor
        print(f"Depósito de {valor} realizado!")
    
    def sacar(self, valor):
        if valor <= self.saldo:
            self.saldo -= valor
            print(f"Saque de {valor} realizado!")
        else:
            print("Saldo insuficiente.")
    
    def mostrar_saldo(self):
        print(f"Saldo atual: {self.saldo}")

Uso:

conta = ContaBancaria("João") 
conta.depositar(100) 
conta.mostrar_saldo() 
conta.sacar(30) 
conta.mostrar_saldo()

Criando vários objetos

c1 = ContaBancaria("João", 500) 
c2 = ContaBancaria("Maria", 1500) 
c1.sacar(100) 
c2.depositar(200)

Objetos independentes, comportamentos independentes.

Atributos dinâmicos

Você pode adicionar atributos novos a um objeto mesmo depois de criado:

p1 = Pessoa("Carlos", 40) 
p1.altura = 1.80 
print(p1.altura) # 1.80

Mas cuidado: isso só vale para aquele objeto, não para a classe inteira.

Erros comuns (e como evitar)

Esquecer o self no método

def apresentar():
    ...

ERRO!
Python não sabe a qual objeto pertence.

✔ Correto:

def apresentar(self):
    ...

Achar que self é uma palavra reservada

Não é!

Você pode renomear, mas nunca faça isso:

def __init__(banana, nome):
    banana.nome = nome

Funciona… mas é confuso.
Use sempre self.

Exercícios para fixar

🟦 Exercício 1

Crie uma classe Carro com:

  • marca
  • modelo
  • ano

E um método descrever() que imprime tudo bonitinho.

🟩 Exercício 2

Crie uma classe Aluno com um método calcular_media() que recebe 3 notas e retorna a média.

🟨 Exercício 3

Crie 3 objetos de uma classe “Animal” e dê a cada um:

  • nome
  • espécie
  • método falar()

Exemplo:

meu_cachorro.falar() # "Au au!"