מבוא למתודות קסם
חלק מהיחידה תכנות מונחה עצמים במסלול ה-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() ואופרטורים, וכך הופכות את המחלקות שלך ליותר פייתוניות ואינטואיטיביות לשימוש.
אתגר
קלבאתגר הזה תממשו מחלקת Counter עם מתודות קסם.
counter.py- זה הקובץ שעליכם לערוך, והוא מכיל הערותTODOשינחו אתכם במימושdriver.py- מכיל מקרי בדיקה נרחבים
ממשו את מחלקת 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השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים (OOP)
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםהפרמטר selfמתודותמאפייניםשיטת הבנאי (__init__)חזרה: מחשבון פשוט5פולימורפיזם
בחינה מחדש של דריסת מתודותטיפוסיות ברווזמחלקות ומתודות אבסטרקטיותעיצוב ממשקיםסיכום – מחשבון צורות8מושגים מתקדמים בתכנות מונחה עצמים
קומפוזיציה לעומת הורשהMixinsמתודות סטטיות ומתודות מחלקהדקורטורים למחלקותמנהלי הקשרתרגלו בעצמכם: קומפיילר Python אונליין