Sobes.tech
Junior — Middle

Qual é o papel dos métodos especiais (dunder) na implementação de geradores e seu uso em Python?

sobes.tech IA

Resposta da IA

Em Python, os métodos especiais (métodos dunder), como __iter__(), __next__(), desempenham um papel fundamental na implementação de geradores e iteradores.

Os geradores são objetos que permitem iterar sobre uma sequência de valores, calculando-os conforme necessário, em vez de imediatamente.

  • __iter__() devolve o iterador do objeto (frequentemente o próprio objeto).
  • __next__() devolve o próximo elemento da sequência ou levanta uma exceção StopIteration quando os elementos acabam.

Quando crias um gerador usando uma função com a palavra-chave yield, o Python cria automaticamente um objeto gerador com esses métodos.

Exemplo de implementação de um iterador simples usando métodos dunder:

class CountUpTo:
    def __init__(self, max):
        self.max = max
        self.current = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.current >= self.max:
            raise StopIteration
        self.current += 1
        return self.current

for number in CountUpTo(3):
    print(number)

Assim, os métodos dunder fornecem o protocolo de iteração, que é a base dos geradores e permite usá-los em ciclos e outras construções que trabalham com objetos iteráveis.