Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida exercício 7

Por que usar um método de classe para fazer uma nova conta, sendo que o construtor já faz isso? Ficou meio confusa essa resolução.

    @classmethod
    def criar_conta(cls, titular, saldo_inicial):
        conta = ContaBancariaPythonica(titular, saldo_inicial)
        return conta

Nesse caso, está sendo atribuida à variável conta uma outra classe. Espero que dê pra entender minha dúvida. Obrigado!

2 respostas
solução!

Oi, Mitsuyoshi! Tudo bem?

O uso de métodos de classe para criar instâncias, como o criar_conta, pode ser uma prática útil em algumas situações, como nas seguintes:

  1. Encapsulamento de Lógica de Criação: Às vezes, a criação de uma instância pode envolver mais do que simplesmente chamar o construtor. Por exemplo, podemos querer adicionar alguma lógica extra, como validações ou ajustes de parâmetros antes de criar a instância, dessa forma, o método de classe pode encapsular essa lógica.

  2. Nomes Descritivos: Um método de classe pode ter um nome mais descritivo do que apenas o construtor, indicando claramente a intenção de como a instância deve ser criada, o que pode tornar o código mais legível.

  3. Facilidade de Uso: Em alguns casos, métodos de classe podem fornecer uma interface mais conveniente para criar instâncias, especialmente se houver várias maneiras de inicializar um objeto.

Espero ter ajudado!

Um forte abraço e bons estudos!

A utilização de um método de classe, como criar_conta, em conjunto com o construtor da classe (init), pode parecer redundante à primeira vista, mas há algumas razões e benefícios que justificam essa abordagem:

Encapsulamento de Lógica: O método de classe pode encapsular lógica adicional que pode ser necessária durante a criação de uma conta. Por exemplo, você pode incluir validações, formatações ou operações que devem ser realizadas antes de instanciar a conta.

Facilidade de Criação de Instâncias: Um método de classe pode fornecer uma maneira clara e explícita de criar instâncias da classe. Isso pode ser útil se você quiser dar um nome mais descritivo à operação de criação, tornando o código mais legível.

Sobrecarga de Métodos: O método de classe permite que você tenha diferentes formas de criar uma instância da classe. Por exemplo, você pode ter outro método de classe que cria uma conta a partir de um arquivo, de dados de um banco de dados ou mesmo com valores padrão.

Herança e Polimorfismo: Se você tiver subclasses que herdam de ContaBancariaPythonica, o método de classe pode ser sobrescrito nas subclasses para criar instâncias específicas da subclasse sem mudar a interface. Isso é útil quando você quer que o método de criação seja consistente, mas o comportamento de criação varia entre as subclasses.

Factory Method: A abordagem de usar um método de classe para criar instâncias é uma forma de aplicar o padrão de design "Factory Method". Este padrão é utilizado para encapsular a lógica de instanciamento, permitindo maior flexibilidade e manutenção do código.

Exemplo Aqui está um exemplo simples que ilustra alguns desses pontos:

class ContaBancariaPythonica:
    def __init__(self, titular, saldo_inicial):
        self.titular = titular
        self.saldo = saldo_inicial

    @classmethod
    def criar_conta(cls, titular, saldo_inicial):
        if saldo_inicial < 0:
            raise ValueError("O saldo inicial não pode ser negativo.")
        return cls(titular, saldo_inicial)

# Usando o método de classe para criar uma conta
conta1 = ContaBancariaPythonica.criar_conta("Victor", 1000)

Nesse exemplo, o método criar_conta valida o saldo_inicial antes de criar a conta, o que não poderia ser feito diretamente no construtor. Essa abordagem torna o código mais seguro e compreensível.