Módulo 1 - Boas-vindas ao Python Avançado
Revisão relâmpago do intermediário
10 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026
O que você vai aprender
- Conferir o domínio de classes, __init__, self, herança e super.
- Relembrar decoradores, geradores com yield e exceções próprias.
- Revisar a diferença entre organizar e projetar.
- Identificar pontos fracos para revisar antes de avançar.
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: Revisão relâmpago do intermediário.
Os objetivos desta aula. Conferir o domínio de classes, __init__, self, herança e super. Relembrar decoradores, geradores com yield e exceções próprias. Revisar a diferença entre organizar e projetar. Identificar pontos fracos para revisar antes de avançar.
Veja o essencial, parte por parte.
O que você precisa ter na ponta da língua. Você deve ler sem esforço: classes com __init__, self, atributos e métodos.
Decoradores e geradores, o feijão com arroz avançado. No módulo 5 você aprende decoradores que recebem argumentos e preservam o nome com functools.wraps.
De organizar para projetar. O último ponto a revisar não é sintaxe, é postura.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
O que você precisa ter na ponta da língua
Esta aula não ensina nada novo de propósito. Ela é uma checagem rápida do terreno. Leia os exemplos abaixo e pergunte-se, honestamente, se você entende cada linha sem travar. Se sim, você está pronto para o avançado. Se algum ponto parecer novo, vale voltar ao módulo correspondente do Curso de Python Intermediário antes de seguir, porque tudo daqui em diante se apoia nesta base.
class Conta:
def __init__(self, dono, saldo=0):
self.dono = dono
self.saldo = saldo
def depositar(self, valor):
self.saldo += valor
def __str__(self):
return f"Conta de {self.dono}: R$ {self.saldo}"
c = Conta("Ana", 100)
c.depositar(50)
print(c) # Conta de Ana: R$ 150Classe com __init__, self, método e __str__. Tudo do Intermediário.
Decoradores e geradores, o feijão com arroz avançado
Dois recursos do Intermediário precisam estar automáticos, porque o avançado os aprofunda muito. O decorador envolve uma função para acrescentar comportamento sem mudar o corpo dela. O gerador produz valores sob demanda com yield, poupando memória. Boa parte deste curso, de decoradores com argumentos a async, é uma extensão direta desses dois conceitos. Se eles ainda confundem, este é o momento de revisar.
def registrar(funcao):
def wrapper(*args, **kwargs):
print(f"chamando {funcao.__name__}")
return funcao(*args, **kwargs)
return wrapper
@registrar
def somar(a, b):
return a + b
print(somar(2, 3)) # chamando somar / 5
def contar_ate(n):
for i in range(1, n + 1):
yield i
print(list(contar_ate(3))) # [1, 2, 3]Um decorador simples e um gerador com yield: a base dos temas avançados.
De organizar para projetar
O último ponto a revisar não é sintaxe, é postura. No Intermediário, tratar um erro com try e except já era um avanço. No avançado, você desenha a hierarquia de exceções do seu programa antes de precisar dela, para que cada falha tenha um tipo próprio e uma mensagem útil. O mesmo vale para estruturas: em vez de sempre usar uma lista, você escolhe a estrutura certa para o problema. Guarde esse exemplo de exceção própria; ele volta, muito mais elaborado, no módulo 12.
class SaldoInsuficienteError(Exception):
pass
def sacar(saldo, valor):
if valor > saldo:
raise SaldoInsuficienteError(f"Faltam R$ {valor - saldo}")
return saldo - valor
try:
sacar(100, 150)
except SaldoInsuficienteError as e:
print("Erro:", e) # Erro: Faltam R$ 50Exceção própria com class e raise, capturada com except. A base do módulo 12.
Teste rápido
No exemplo, por que criar uma classe SaldoInsuficienteError em vez de usar um print de erro?
Perguntas frequentes
- E se eu travar em algum exemplo desta revisão?
- É o sinal de que vale revisar aquele tema no Curso de Python Intermediário antes de seguir. O avançado se apoia em orientação a objetos, decoradores e geradores o tempo todo, então poucos minutos de revisão agora economizam horas de confusão depois.
- Preciso decorar a sintaxe de metaclasses e async já?
- Não. Esses são temas que o próprio curso ensina do zero, nos módulos 9 e 11. O que precisa estar firme é a base do Intermediário: classes, herança, decoradores, geradores e exceções. É sobre isso que os temas novos se apoiam.
- O que é wrapper, que aparece no exemplo do decorador?
- É a função interna que o decorador cria para envolver a função original, acrescentando comportamento antes ou depois de chamá-la. O nome wrapper é uma convenção; no módulo 5 você aprende a preservar o nome e a documentação da função original com functools.wraps.
- Qual a diferença entre um gerador e uma lista mesmo?
- A lista guarda todos os valores na memória de uma vez; o gerador produz um valor por vez, sob demanda, com yield. Para sequências grandes ou infinitas, o gerador economiza memória. Esse conceito é a ponte para os geradores avançados e para async.
- Preciso dominar testes automatizados antes de começar?
- Uma noção básica de assert e de por que testar já ajuda, e você viu no Intermediário. O módulo 13 deste curso retoma o assunto do começo, agora com o pytest, fixtures e mocks, então testes não são um pré-requisito rígido.
- Posso pular esta revisão se já me sinto seguro?
- Pode, mas vale ao menos rodar os exemplos no Playground. Leva poucos minutos e confirma que a base está firme. Se tudo rodar e fizer sentido, avance tranquilo para o módulo 2, sobre tipagem estática.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.