Menu
Coddy logo textTech

מימוש __iter__()

שיעור 4 מתוך 13 בקורס איטרטורים ב-Python של Coddy.

יצירת איטרטור מותאם אישית ב-Python כרוכה במימוש המתודה __iter__() במחלקה. המתודה הזו היא חלק חיוני מפרוטוקול האיטרטור ומאפשרת לך להגדיר כיצד האובייקט המותאם אישית שלך מתנהג כאיטרטור.

המתודה __iter__()

למתודה __iter__() יש שתי מטרות עיקריות:

  1. היא הופכת אובייקט לאובייקט שניתן לאיטרציה.
  2. היא מחזירה את אובייקט האיטרטור עצמו.

הנה המבנה הבסיסי של מחלקה עם מתודת __iter__():

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

    def __iter__(self):
        return self

מימוש __iter__()

כדי לממש את __iter__() במחלקה המותאמת אישית שלך:

  1. הגדירי את המתודה __iter__() בתוך המחלקה שלך.
  2. המתודה צריכה להחזיר את אובייקט האיטרטור עצמו (בדרך כלל self).

הנה דוגמה לאיטרטור מותאם אישית פשוט:

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

    def __iter__(self):
        # החזר את אובייקט האיטרטור (self)
        return self

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

# שימוש באיטרטור המותאם אישית
countdown = CountDown(5)
for num in countdown:
    print(num)

בדוגמה הזו, המתודה __iter__() מחזירה את self, וכך האובייקט CountDown הוא גם אובייקט שניתן לאיטרציה וגם האיטרטור של עצמו.

נקודות חשובות

  • המתודה __iter__() נקראת כשמשתמשים בפונקציה iter() על אובייקט או כשמשתמשים בו בלולאת for.
  • החזרת self ב-__iter__() נפוצה כשהמחלקה מממשת גם את __iter__() וגם את __next__().
  • אם המחלקה שלך מממשת רק את __iter__(), עליה להחזיר אובייקט איטרטור נפרד שיש לו מתודת __next__().

באמצעות מימוש __iter__(), האובייקטים המותאמים אישית שלך הופכים לאובייקטים שניתן לבצע עליהם איטרציה, כך שאפשר להשתמש בהם בלולאות for ובפעולות אחרות המבוססות על איטרטורים ב-Python.

quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

challenge icon

אתגר

קל

צרו מחלקת איטרטור מותאמת אישית בשם AlphabetIterator שמייצרת אותיות גדולות של האלפבית האנגלי. האיטרטור צריך להתחיל ב-'A' ולהמשיך עד לאות מוגדרת.

הקלט שיסופק לכם:

  • אות גדולה אחת כקלט (למשל, 'E', 'K', 'Z')

המחלקה AlphabetIterator שלכם צריכה:

  • לממש את המתודה __iter__() כדי להפוך את האובייקט לאיטרטיבי
  • לייצר אותיות גדולות החל מ-'A'
  • לעצור כשהיא מגיעה לאות הקלט שצוינה (כולל)

לאחר מימוש המחלקה AlphabetIterator, צרו מופע שלה באמצעות אות הקלט, והדפיסו כל אות שנוצרה בשורה חדשה.

הקלט יסופק כמחרוזת המכילה אות גדולה אחת.

נסו בעצמכם

# קרא את הקלט
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: ממש את המתודה __next__()

# צור מופע של AlphabetIterator
alphabet_iter = AlphabetIterator(end_letter)

# TODO: עבור על AlphabetIterator והדפס כל אות

# הערה: ודא שכל אות מודפסת בשורה חדשה

כל השיעורים ביחידה איטרטורים ב-Python

תרגלו בעצמכם: קומפיילר Python אונליין