Menu
Coddy logo textTech

Implementowanie __iter__()

Lekcja 4 z 13 w kursie Iteratory w Pythonie w Coddy.

Tworzenie własnego iteratora w Pythonie polega na zaimplementowaniu metody __iter__() w klasie. Ta metoda jest kluczowym elementem protokołu iteratora i pozwala określić, jak własny obiekt zachowuje się jako iterator.

Metoda __iter__()

Metoda __iter__() ma dwa główne zadania:

  1. Sprawia, że obiekt jest iterowalny.
  2. Zwraca sam obiekt iteratora.

Oto podstawowa struktura klasy z metodą __iter__():

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

    def __iter__(self):
        return self

Implementowanie __iter__()

Aby zaimplementować __iter__() we własnej klasie:

  1. Zdefiniuj metodę __iter__() w swojej klasie.
  2. Metoda powinna zwracać sam obiekt iteratora (zwykle self).

Oto przykład prostego własnego iteratora:

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

    def __iter__(self):
        # Zwróć obiekt iteratora (self)
        return self

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

# Użycie własnego iteratora
countdown = CountDown(5)
for num in countdown:
    print(num)

W tym przykładzie metoda __iter__() zwraca self, dzięki czemu obiekt CountDown jest zarówno obiektem iterowalnym, jak i własnym iteratorem.

Najważniejsze informacje

  • Metoda __iter__() jest wywoływana, gdy używasz funkcji iter() na obiekcie lub używasz go w pętli for.
  • Zwracanie self w metodzie __iter__() jest częste, gdy klasa implementuje zarówno __iter__(), jak i __next__().
  • Jeśli twoja klasa implementuje tylko __iter__(), powinna zwracać osobny obiekt iteratora, który ma metodę __next__().

Implementując __iter__(), sprawiasz, że własne obiekty stają się iterowalne, co pozwala używać ich w pętlach for oraz w innych operacjach opartych na iteratorach w Pythonie.

quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

challenge icon

Wyzwanie

Łatwy

Utwórz własną klasę iteratora o nazwie AlphabetIterator, która generuje wielkie litery alfabetu angielskiego. Iterator powinien zaczynać od 'A' i kontynuować aż do określonej litery.

Otrzymujesz:

  • Jedną wielką literę jako dane wejściowe (np. 'E', 'K', 'Z')

Twoja klasa AlphabetIterator powinna:

  • Implementować metodę __iter__(), aby obiekt był iterowalny
  • Generować wielkie litery, zaczynając od 'A'
  • Zatrzymywać się po osiągnięciu podanej litery wejściowej (włącznie)

Po zaimplementowaniu klasy AlphabetIterator utwórz jej instancję, używając podanej litery, i wypisz każdą wygenerowaną literę w nowym wierszu.

Dane wejściowe zostaną podane jako ciąg znaków zawierający jedną wielką literę.

Spróbuj swoich sił

# Wczytaj dane wejściowe
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: Zaimplementuj metodę __next__()

# Utwórz instancję AlphabetIterator
alphabet_iter = AlphabetIterator(end_letter)

# TODO: Przejdź przez AlphabetIterator i wypisz każdą literę

# Uwaga: Upewnij się, że każda litera jest wypisywana w nowej linii

Wszystkie lekcje w sekcji Iteratory w Pythonie

Poćwicz samodzielnie: Kompilator Python online