Menu
Coddy logo textTech

בחינה מחדש של דריסת מתודות

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

פולימורפיזם פירושו „צורות רבות”, והוא מאפשר לאובייקטים ממחלקות שונות להגיב באופן שונה לאותה קריאה למתודה. דריסת מתודות מאפשרת זאת.

הנה מחלקת אב עם מתודה:

class Animal:
    def speak(self):
        return "Animal makes a sound"

צרו מחלקות צאצא שמגדירות מחדש את אותה שיטה:

class Dog(Animal):
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

class Cow(Animal):
    def speak(self):
        return "Moo!"

כל מחלקת צאצא מספקת מימוש משלה של speak().

צרו רשימה של בעלי חיים שונים:

animals = [Dog(), Cat(), Cow(), Animal()]

קרא לאותה מתודה בכל האובייקטים:

for animal in animals:
    print(animal.speak())

פלט:

Woof!
Meow!
Moo!
Animal makes a sound

זוהי פולימורפיזם בפעולה — אותה קריאה למתודה מתנהגת באופן שונה בהתאם לטיפוס האמיתי של האובייקט.

אפשר להשתמש בפולימורפיזם גם עם פונקציות:

def make_animal_speak(animal):
    print(animal.speak())

dog = Dog()
cat = Cat()

make_animal_speak(dog)  # הב הב!
make_animal_speak(cat)  # מיאו!

הפונקציה לא צריכה לדעת מאיזה סוג בעל חיים היא מקבלת — היא פשוט קוראת ל־speak() ומקבלת את ההתנהגות המתאימה.

נקודה מרכזית: פולימורפיזם מאפשר להתייחס לאובייקטים שונים באותו אופן באמצעות ממשק משותף. דריסת מתודות מספקת מימושים שונים, ואילו פולימורפיזם מאפשר לקרוא להן באופן אחיד. כך הקוד נעשה גמיש יותר וקל יותר להרחבה.

challenge icon

אתגר

בינוני

באתגר הזה תיישמו מערכת ירושה של כלי רכב.

תצטרכו לערוך את הקבצים האלה:

  • vehicle.py: יישמו את מחלקת הבסיס Vehicle עם מאפייני יצרן ודגם ומתודות
  • car.py: צרו את המחלקה Car שיורשת מ־Vehicle
  • motorcycle.py: צרו את המחלקה Motorcycle שיורשת מ־Vehicle
  • truck.py: צרו את המחלקה Truck שיורשת מ־Vehicle

כל קובץ מכיל הערות TODO מפורטות שינחו אתכם בתהליך המימוש שלב אחר שלב. שימו לב להצהרות הייבוא הנדרשות בין הקבצים ופעלו לפי קשרי הירושה. הקובץ driver.py מכיל מקרי בדיקה שיוודאו שהמימוש שלכם פועל כראוי בכל סוגי כלי הרכב.

נסו בעצמכם

from vehicle import Vehicle
from car import Car
from motorcycle import Motorcycle
from truck import Truck

def vehicle_info(vehicle):
    return f"{vehicle.make} {vehicle.model}: {vehicle.start()}, Efficiency: {vehicle.fuel_efficiency()} mpg"


# בדיקה עם כלי רכב שונים - אין לשנות את קוד הבדיקה הזה
vehicles = [
    Car("Toyota", "Camry"),
    Motorcycle("Harley", "Davidson"),
    Truck("Ford", "F-150"),
    Vehicle("Generic", "Vehicle")
]

for v in vehicles:
    print(vehicle_info(v))
quiz iconבחנו את עצמכם

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

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

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