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:
- Sprawia, że obiekt jest iterowalny.
- 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:
- Zdefiniuj metodę
__iter__()w swojej klasie. - 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 funkcjiiter()na obiekcie lub używasz go w pętli for. - Zwracanie
selfw 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.
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wyzwanie
ŁatwyUtwó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 liniiWszystkie lekcje w sekcji Iteratory w Pythonie
2Tworzenie własnych iteratorów
Implementowanie __iter__()Implementowanie __next__()Iteratory nieskończonePoćwicz samodzielnie: Kompilator Python online