Menu
CoddyTech

מבוא למתודות קסם

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Python של Coddy. שיעור 33 מתוך 64.

שיטות קסם (שנקראות גם שיטות dunder) הן שיטות מיוחדות עם קווים תחתונים כפולים בתחילתן ובסופן. Python קוראת להן באופן אוטומטי בתגובה לפעולות מסוימות.

הנה דוגמה למחלקה עם מתודות קסם:

class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self.pages = pages
    
    def __str__(self):
        return f"{self.title} by {self.author}"

המתודה __init__ נקראת אוטומטית כשאתה יוצר אובייקט:

my_book = Book("Python Programming", "John Smith", 350)

המתודה __str__ נקראת אוטומטית כשממירים את האובייקט למחרוזת:

print(my_book)        # קורא ל-__str__ באופן אוטומטי
print(str(my_book))   # קורא גם ל-__str__

פלט:

Python Programming by John Smith
Python Programming by John Smith

בלי __str__, ההדפסה תציג את מיקום האובייקט בזיכרון:

class SimpleBook:
    def __init__(self, title):
        self.title = title

simple = SimpleBook("Test Book")
print(simple)  # <__main__.SimpleBook object at 0x...>

הוסיפו שיטת קסם נוספת לחישוב האורך:

class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self.pages = pages
    
    def __str__(self):
        return f"{self.title} by {self.author}"
    
    def __len__(self):
        return self.pages

my_book = Book("Python Programming", "John Smith", 350)
print(len(my_book))   # קורא ל-__len__ באופן אוטומטי

פלט:

350

נקודה חשובה: מתודות קסם מתחילות ומסתיימות בשני קווים תחתונים (__method__) ונקראות אוטומטית על ידי Python. הן מאפשרות לאובייקטים שלך לעבוד עם פונקציות מובנות כמו str(), len() ואופרטורים, וכך הופכות את המחלקות שלך ליותר פייתוניות ואינטואיטיביות לשימוש.

challenge icon

אתגר

קל

באתגר הזה תממשו מחלקה Counter עם מתודות קסם.

  • counter.py - זהו הקובץ שעליכם לערוך, והוא מכיל הערות TODO שינחו אתכם במימוש
  • driver.py - מכיל מקרי בדיקה נרחבים

Iממשו את המחלקה Counter בקובץ counter.py ואת מקרי הבדיקה בקובץ driver.py בהתאם להערות TODO. המחלקה צריכה לתמוך באתחול עם ערכים אופציונליים, בייצוג כמחרוזת ובפעולות חיבור.

נסו בעצמכם

# TODO: ייבאו את המחלקה Counter מתוך counter.py
# השתמשו בפורמט: from counter import Counter

# מנגנון מקיף לטיפול במקרי בדיקה
test_case = input()

if test_case == "init_test":
    # TODO: בדקו את האתחול עם ערך ברירת המחדל
    # צרו מונה ללא ארגומנטים והדפיסו אותו
    # פלט צפוי: "Count: 0"
    pass

elif test_case == "init_with_value":
    # TODO: בדקו את האתחול עם ערך מסוים
    # צרו מונה עם ערך התחלתי 10 והדפיסו אותו
    # הערה: print() קוראת ל־__str__ באופן משתמע, אבל כאן אנחנו מתמקדים בבדיקת __init__
    # פלט צפוי: "Count: 10"
    pass


elif test_case == "addition":
    # TODO: בדקו את פעולת החיבור
    # צרו מונה עם הערך 3, הוסיפו לו 7 והדפיסו את התוצאה
    # פלט צפוי: "Count: 10"
    pass

elif test_case == "chained_addition":
    # TODO: בדקו פעולות חיבור בשרשרת
    # צרו מונה עם ערך 1, הוסיפו לו 2, לאחר מכן הוסיפו לתוצאה 3 והדפיסו אותה
    # פלט צפוי: "Count: 6"
    pass

elif test_case == "negative_values":
    # TODO: בדקו עם ערכים שליליים
    # צרו מונה עם ערך -5 והדפיסו אותו
    # לאחר מכן הוסיפו לו -3 והדפיסו את התוצאה
    # פלטים צפויים: "Count: -5" ו-"Count: -8"
    pass

elif test_case == "zero_value":
    # TODO: בדקו עם ערכי אפס
    # צרו מונה עם ערך 0, הוסיפו לו 0 והדפיסו אותו
    # פלט צפוי: "Count: 0"
    pass

elif test_case == "large_values":
    # TODO: בדקו עם ערכים גדולים
    # צרו מונה עם ערך 1000000 והוסיפו לו 9000000
    # פלט צפוי: "Count: 10000000"
    pass

elif test_case == "multiple_counters":
    # TODO: בדקו אינטראקציה בין כמה מונים
    # צרו את counter1 עם ערך 5 ואת counter2 עם ערך 10
    # הדפיסו את שני המונים
    # פלטים צפויים: "Count: 5" ו-"Count: 10"
    pass

elif test_case == "type_validation":
    # TODO: בדוק הוספה של טיפוסים שונים
    # נסה להוסיף מספר מסוג float (2.5) למונה שערכו 5
    # פלט צפוי: "Count: 7.5"
    pass
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה תכנות מונחה עצמים

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