Menu
Coddy logo textTech

Implementare __iter__()

Lezione 4 di 13 del corso Iteratori in Python di Coddy.

Creare un iteratore personalizzato in Python comporta l'implementazione del metodo __iter__() in una classe. Questo metodo è una parte fondamentale del protocollo degli iteratori e ti consente di definire il comportamento del tuo oggetto personalizzato come iteratore.

Il metodo __iter__()

Il metodo __iter__() ha due scopi principali:

  1. Rende un oggetto iterabile.
  2. Restituisce l'oggetto iteratore stesso.

Ecco la struttura di base di una classe con un metodo __iter__():

class MyIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0

    def __iter__(self):
        return self

Implementare __iter__()

Per implementare __iter__() nella tua classe personalizzata:

  1. Definisci il metodo __iter__() all'interno della tua classe.
  2. Il metodo dovrebbe restituire l'oggetto iteratore stesso (di solito self).

Ecco un esempio di un semplice iteratore personalizzato:

class CountDown:
    def __init__(self, start):
        self.start = start

    def __iter__(self):
        # Return the iterator object (self)
        return self

    def __next__(self):
        if self.start <= 0:
            raise StopIteration
        self.start -= 1
        return self.start + 1

# Using the custom iterator
countdown = CountDown(5)
for num in countdown:
    print(num)

In questo esempio, il metodo __iter__() restituisce self, rendendo l'oggetto CountDown sia iterabile sia il proprio iteratore.

Punti chiave

  • Il metodo __iter__() viene chiamato quando usi la funzione iter() su un oggetto o quando lo usi in un ciclo for.
  • Restituire self in __iter__() è comune quando la classe implementa sia __iter__() sia __next__().
  • Se la tua classe implementa solo __iter__(), dovrebbe restituire un oggetto iteratore separato che abbia un metodo __next__().

Implementando __iter__(), rendi iterabili i tuoi oggetti personalizzati, consentendo di usarli nei cicli for e in altre operazioni basate sugli iteratori in Python.

quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

challenge icon

Sfida

Facile

Crea una classe iteratore personalizzata chiamata AlphabetIterator che genera le lettere maiuscole dell'alfabeto inglese. L'iteratore dovrebbe iniziare da 'A' e continuare fino a una lettera specificata.

Ti viene fornito quanto segue:

  • Una singola lettera maiuscola come input (ad es., 'E', 'K', 'Z')

La tua classe AlphabetIterator dovrebbe:

  • Implementare il metodo __iter__() per rendere l'oggetto iterabile
  • Generare lettere maiuscole a partire da 'A'
  • Fermarsi quando raggiunge la lettera specificata nell'input (inclusa)

Dopo aver implementato la classe AlphabetIterator, creane un'istanza usando la lettera di input e stampa ogni lettera generata su una nuova riga.

L'input verrà fornito come una stringa contenente una singola lettera maiuscola.

Provalo tu

# Leggi l'input
end_letter = input().strip()

class AlphabetIterator:
    def __init__(self, end_letter):
        self.end_letter = end_letter
        self.current_letter = 'A'

    def __iter__(self):
        return self

    # TODO: Implementa il metodo __next__()

# Crea un'istanza di AlphabetIterator
alphabet_iter = AlphabetIterator(end_letter)

# TODO: Itera su AlphabetIterator e stampa ogni lettera

# Nota: Assicurati di stampare ogni lettera su una nuova riga

Tutte le lezioni di Iteratori in Python

Esercitati da solo: Compilatore Python online