Os desafios da: 07 Hora da prática: criando classes, construtores e métodos, apresentam problemas conceituais importantes que prejudicam o aprendizado de orientação a objetos.
- Esse ERRO/BUG já foi apontado por outros alunos e mesmo assim o exercício continua sendo sugerido com erro, sem a devida correção. Gostaria de entender o porquê? Não é a primeira vez que vou fazer um exercício que vejo que tem erro e quando olho no fórum outros alunos já apontaram o mesmo erro meses ou até anos atrás e ainda assim o exercício não foi corrigido.
- Primeiro pede para:
"1. Crie uma classe chamada ContaBancaria com um construtor que aceita os parâmetros titular e saldo. Inicie o atributo ativo como False por padrão."
- Depois no ponto 3 está o erro crucial:
"3.Adicione um método de classe chamado ativar_conta à classe ContaBancaria que define o atributo ativo como True. Crie uma instância da classe, chame o método de classe e imprima o valor de ativo."
O enunciado solicita um método de classe (@classmethod) que deve alterar o atributo ativo de uma instância específica.
Isso é tecnicamente incorreto: métodos de classe trabalham com a classe, não com instâncias.
A solução fornecida utiliza @classmethod recebendo uma instância como argumento, o que viola sua finalidade e gera um uso equivocado do recurso.
A solução oficial implementa:
# 3) Adicione um método de classe chamado `ativar_conta` à classe `ContaBancaria` que define o atributo ativo como `True`. Crie uma instância da classe, chame o método de classe e imprima o valor de ativo.
@classmethod
def ativar_conta(cls, conta):
conta._ativo = True
conta3 = ContaBancaria("Carlos", 200)
print(f"Antes de ativar: Conta ativa? {conta3._ativo}")
ContaBancaria.ativar_conta(conta3)
print(f"Depois de ativar: Conta ativa? {conta3._ativo}")
Isso equivale a um método comum, tornando o uso de @classmethod artificial e incorreto.
Didaticamente, isso ensina o uso errado de um dos principais mecanismos de OOP em Python.
Na etapa seguinte (“Refatore para a forma pythonica”), apenas o construtor é refatorado.
O exercício, porém, não refatora o método do passo anterior nem corrige o uso indevido do método de classe.
Isso gera inconsistência entre as etapas e reforça o erro conceitual.
# 4) Refatore a classe `ContaBancaria` para utilizar a abordagem "pythonica" na criação de atributos. Utilize propriedades, se necessário.
class ContaBancariaPythonica:
def __init__(self, titular, saldo):
self._titular = titular
self._saldo = saldo
self._ativo = False
@property
def titular(self):
return self._titular
@property
def saldo(self):
return self._saldo
@property
def ativo(self):
return self._ativo
A classe refatorada ignora completamente o método ativar_conta do exercício anterior, como se fosse uma classe nova e independente, quebrando a continuidade do aprendizado.
Esses pontos tornam o exercício incoerente e podem levar o aluno a aprender conceitos errados sobre métodos de classe e boas práticas de design em Python.