1
resposta

Não seria melhor usar um método de instância ao invés de classmethod?

Eu tenho uma dúvida, no trecho,

"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."

Não seria uma prática ruim criar um método de classe para ativar conta, já que ativar conta deveria ser um método da instância, já que '_ativo' é um atributo protegido da instância e não da classe?

1 resposta

Olá Davidson! Tudo bem?

Na verdade, a escolha entre usar um método de classe (@classmethod) ou um método de instância depende muito do contexto e da intenção de design da classe.

No seu caso, se o atributo _ativo é um atributo protegido da instância, faz sentido pensar que a ativação da conta deveria ser um método de instância. Isso porque cada conta bancária individualmente pode ser ativada ou desativada, e essa ação não afeta outras instâncias da classe.

Aqui está um exemplo prático de como poderia ser implementado como um método de instância:

class ContaBancaria:
    def __init__(self, numero, titular):
        self.numero = numero
        self.titular = titular
        self._ativo = False

    def ativar_conta(self):
        self._ativo = True

# Criando uma instância da classe
conta = ContaBancaria("12345", "João")

# Chamando o método de instância para ativar a conta
conta.ativar_conta()

# Imprimindo o valor de ativo
print(conta._ativo)  # Saída: True

No entanto, se o exercício está pedindo especificamente para usar um @classmethod, pode ser que a intenção seja demonstrar o uso desse tipo de método, mesmo que não seja o caso mais comum para essa situação específica. Aqui está um exemplo de como poderia ser feito com um método de classe:

class ContaBancaria:
    _ativo = False  # Atributo de classe

    def __init__(self, numero, titular):
        self.numero = numero
        self.titular = titular

    @classmethod
    def ativar_conta(cls):
        cls._ativo = True

# Criando uma instância da classe
conta = ContaBancaria("12345", "João")

# Chamando o método de classe para ativar a conta
ContaBancaria.ativar_conta()

# Imprimindo o valor de ativo
print(ContaBancaria._ativo)  # Saída: True

Neste segundo exemplo, o método ativar_conta está atuando sobre o atributo de classe _ativo, compartilhado por todas as instâncias da classe. Isso não seria ideal para ativar uma conta individual, mas pode ser útil em outros contextos onde você precisa modificar um estado compartilhado por todas as instâncias.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.