1
resposta

[Dúvida] Método de classe ou de instância

No exercício, a função activate_account é implementada como um método de classe, mas isso não faz sentido na classe BankAccount, pois trata-se de uma função que modifica um atributo de instância, e não de classe. Esse meu pensamento faz sentido ? E a minha implementação está correta ?

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

  • Correta ✅ (Na minha opinião)
class BankAccount:
    def __init__(self, holder, balance):
        self._holder = holder
        self._balance = balance
        self._active = False

    def __str__(self):
        return f"Holder: {self._holder}, Balance: R$ {self._balance}"

    def activate_account(self):
        self._active = True
  • Errada ❌ (Na minha opinião)
class BankAccount:
    def __init__(self, holder, balance):
        self._holder = holder
        self._balance = balance
        self._active = False

    def __str__(self):
        return f"Holder: {self._holder}, Balance: R$ {self._balance}"

    @classmethod
    def activate_account(cls):
        cls._active = True
1 resposta

Olá, Taciano. Tudo bem?

Seu raciocínio está correto. Em geral, métodos de classe são usados quando precisamos de um método que opere em nível de classe, ou seja, que não dependa de uma instância específica. No caso da função activate_account, ela parece ser mais adequada como um método de instância, pois está modificando um atributo que pertence a cada instância individual da classe BankAccount.

Na sua implementação, você corretamente definiu activate_account como um método de instância, o que faz mais sentido para o contexto, já que cada conta bancária (instância) terá seu próprio estado de ativação.

Por outro lado, a implementação que você considerou errada tenta modificar um atributo de classe, o que não é o caso aqui, já que _active é um atributo de instância.

Portanto, sua implementação está alinhada com o que se espera no contexto de orientação a objetos.

Espero ter ajudado.

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