Olá pessoal! Gostaria de levantar um ponto sobre a abordagem sugerida para o método ativar_conta da classe ContaBancaria.
No exemplo proposto:
@classmethod
def ativar_conta(cls, conta):
conta._ativo = True
Essa abordagem me parece desnecessária e até contraintuitiva em relação ao uso adequado da Orientação a Objetos em Python. Isso porque:
O método não precisa ser de classe (@classmethod), já que ele age sobre um objeto específico (conta) e modifica seus atributos diretamente.
Estamos passando o objeto como parâmetro, o que foge do padrão de usar self para modificar o estado interno da instância que chamou o método.
O nome ativar_conta sugere que queremos ativar a conta – mas o código apenas força _ativo = True, sem considerar o estado anterior ou permitir alternância.
Uma alternativa mais “pythônica” e prática seria implementar como um método de instância:
def ativar_conta(self):
self._ativo = not self._ativo
Dessa forma:
O método pode ser chamado diretamente pela instância (conta.ativar_conta()), o que é mais natural.
A lógica usa not self._ativo, o que permite alternar entre ativo e inativo, tornando o método mais flexível.
É mais alinhado à convenção orientada a objetos em Python, que prioriza métodos de instância para manipular atributos internos