Módulo 10 - Orientação a objetos: classes
Métodos de instância
10 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026
O que você vai aprender
- Entender que método é uma função definida dentro da classe.
- Usar self dentro do método para ler e alterar os atributos do objeto.
- Chamar um método pelo ponto, como conta.depositar(100).
- Colocar regras no método, como impedir saque sem saldo suficiente.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Métodos de instância.
Os objetivos desta aula. Entender que método é uma função definida dentro da classe. Usar self dentro do método para ler e alterar os atributos do objeto. Chamar um método pelo ponto, como conta.depositar(100). Colocar regras no método, como impedir saque sem saldo suficiente.
Veja o essencial, parte por parte.
O que é um método. Método é uma função definida dentro da classe, com self como primeiro parâmetro.
O self liga o método ao objeto certo. self.saldo += valor é o mesmo que self.saldo = self.saldo + valor, mais curto.
Regras dentro do método. O grande ganho de guardar o comportamento dentro do objeto é poder pôr regras junto.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
O que é um método
Um método é simplesmente uma função escrita dentro da classe. A diferença para uma função solta é o self: como todo método de instância, ele recebe o objeto atual em primeiro lugar e, por meio dele, alcança os atributos daquele objeto. É assim que o comportamento gruda no dado. Em vez de uma função depositar(saldo, valor) longe da conta, você escreve um método depositar dentro da classe, e ele já sabe em qual saldo mexer: o self.saldo.
class Conta:
def __init__(self, titular, saldo=0):
self.titular = titular
self.saldo = saldo
def depositar(self, valor):
self.saldo = self.saldo + valor
conta = Conta("Ana", 100)
conta.depositar(50)
print(conta.saldo) # 150O método depositar usa self.saldo para alterar o saldo do próprio objeto.
Ao chamar conta.depositar(50), o Python entrega a própria conta como self e o número 50 como valor. Dentro do método, self.saldo = self.saldo + valor lê o saldo atual do objeto, soma o depósito e grava de volta. Repare que você não passa o self na chamada; ele vem do objeto antes do ponto. Por isso a assinatura tem dois parâmetros, self e valor, mas a chamada informa só o valor.
O self liga o método ao objeto certo
Como o método age sempre sobre o self, o mesmo código serve a qualquer objeto. Chame conta_ana.depositar(50) e o depósito entra na conta da Ana; chame conta_bruno.depositar(10) e entra na do Bruno. É o objeto antes do ponto que decide qual saldo será alterado. Uma classe, muitos objetos, um método só, e cada chamada mexe apenas nos dados do objeto certo. Essa é a economia da orientação a objetos: escrever o comportamento uma vez e reaproveitar em todas as instâncias.
class Conta:
def __init__(self, titular, saldo=0):
self.titular = titular
self.saldo = saldo
def depositar(self, valor):
self.saldo += valor
ana = Conta("Ana", 100)
bruno = Conta("Bruno", 100)
ana.depositar(500)
print(ana.saldo) # 600
print(bruno.saldo) # 100 (nao mudou)O mesmo método depositar age em objetos diferentes, sem misturar os saldos.
Regras dentro do método
O grande ganho de guardar o comportamento dentro do objeto é poder pôr regras junto. Um saque não deveria deixar o saldo negativo, e o lugar natural para essa checagem é o próprio método sacar. Assim, qualquer parte do programa que sacar dessa conta passa pela mesma regra, sem chance de esquecer. Isso se chama encapsular: os dados e as regras que mexem neles ficam dentro do objeto, e o resto do código só pede ações claras, como depositar e sacar.
class Conta:
def __init__(self, titular, saldo=0):
self.titular = titular
self.saldo = saldo
def depositar(self, valor):
self.saldo += valor
def sacar(self, valor):
if valor > self.saldo:
print("Saldo insuficiente.")
return False
self.saldo -= valor
return True
c = Conta("Ana", 100)
print(c.sacar(30)) # True
print(c.saldo) # 70
print(c.sacar(200)) # Saldo insuficiente. -> FalseO método sacar valida o saldo antes de descontar e avisa quando não dá.
O método sacar primeiro compara o valor pedido com o self.saldo. Se não houver saldo, ele avisa e devolve False sem mexer no dinheiro. Havendo saldo, desconta e devolve True. Devolver um booleano deixa quem chamou saber se o saque deu certo, para decidir o que fazer em seguida. Com depositar e sacar prontos, ninguém precisa alterar self.saldo direto pelo ponto: o objeto passa a cuidar do seu próprio dinheiro, com regras garantidas. Na prática final do módulo você reúne tudo isso em uma classe ContaBancaria completa.
Teste rápido
Na chamada conta.depositar(50), de onde vem o self dentro do método?
Perguntas frequentes
- Qual a diferença entre método e função?
- Um método é uma função definida dentro de uma classe e recebe self, para agir sobre um objeto. Uma função solta vive fora de qualquer classe e não tem self. Na prática, todo método é uma função, mas nem toda função é método. Chama-se o método pelo ponto: conta.depositar(100).
- Por que a chamada não passa o self, se ele está na definição?
- Porque o Python entrega o self sozinho: ele é o objeto antes do ponto na chamada. Em conta.depositar(50), o conta vira o self e o 50 vira o valor. Você define o método com self e valor, mas informa só o valor ao chamar.
- Posso ter quantos métodos quiser em uma classe?
- Sim, quantos fizerem sentido. Uma conta pode ter depositar, sacar, transferir, extrato, e cada um recebe self para agir sobre o objeto. O ideal é que cada método faça uma coisa clara, com um nome que explique a ação.
- Por que colocar a regra do saldo dentro do método sacar?
- Porque assim a regra vale para todo saque, sem depender de quem chama lembrar dela. Isso é encapsular: os dados e as regras ficam juntos no objeto. Se a validação estivesse solta em cada ponto do programa, uma parte poderia esquecer e deixar o saldo negativo.
- Por que o método sacar devolve True ou False?
- Para avisar quem chamou se o saque deu certo. Devolvendo um booleano, o restante do programa pode decidir o que fazer: mostrar um recibo se deu True, ou pedir outro valor se deu False. Um método que só executa e não informa nada deixa quem chamou no escuro.
- self.saldo += valor é diferente de self.saldo = self.saldo + valor?
- Não, fazem exatamente a mesma coisa: pegam o saldo atual, somam o valor e guardam de volta. O += é só uma forma mais curta e comum de escrever. Funciona com números, textos e listas, sempre no sentido de acumular no que já existe.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.