Menu
Coddy logo textTech

ירושה מרובה

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

ירושה מרובה מאפשרת למחלקה לרשת מיותר ממחלקת אב אחת, ולשלב פונקציונליות ממקורות שונים.

הנה שתי מחלקות אב:

class Animal:
    def __init__(self, name):
        self.name = name
    
    def eat(self):
        return f"{self.name} is eating"

class Flyable:
    def fly(self):
        return f"{self.name} is flying"

צור מחלקת צאצא שיורשת משתי מחלקות האב:

class Bird(Animal, Flyable):
    def __init__(self, name, species):
        super().__init__(name)  # קורא ל-__init__ של Animal
        self.species = species
    
    def sing(self):
        return f"{self.name} is singing"

התחביר class Bird(Animal, Flyable): פירושו ש-Bird יורשת גם מ-Animal וגם מ-Flyable.

צרו אובייקט של ציפור והשתמשו במתודות של שני ההורים:

sparrow = Bird("Sparrow", "House sparrow")

קרא למתודות ממחלקת האב הראשונה:

print(sparrow.eat())

קרא למתודות ממחלקת האב השנייה:

print(sparrow.fly())

קראו למתודה של הציפור עצמה:

print(sparrow.sing())

פלט:

Sparrow is eating
Sparrow is flying
Sparrow is singing

אפשר לבדוק את סדר הירושה:

print(Bird.__mro__)  # סדר חיפוש המתודות

הדבר מראה איזה מחלקת־אב נבדקת ראשונה בעת חיפוש מתודות.

נקודה מרכזית: ירושה מרובה משתמשת בתחביר class Child(Parent1, Parent2):. מחלקת הבת מקבלת את כל המתודות מכל מחלקות האב. Python בודקת את מחלקות האב משמאל לימין כשמחפשים מתודות.

challenge icon

אתגר

בינוני

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

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

  • device.py - לממש את מחלקת הבסיס Device
  • internet.py - לממש את מחלקת הבסיס Internet
  • smartphone.py - לממש את המחלקה Smartphone שיורשת משתי מחלקות הבסיס
  • driver.py - לממש מקרי בדיקה שיוודאו שהמימוש שלך פועל כראוי

כל קובץ מכיל הערות TODO מפורטות שינחו אותך צעד אחר צעד בתהליך המימוש.

נסו בעצמכם

# TODO: ייבאו את המחלקה Smartphone מתוך smartphone.py

# צרו סמארטפון ובדקו את המתודות שלו
# TODO: צרו אובייקט מסוג Smartphone עם מותג "Apple" ודגם "iPhone 13"
my_phone = None

# TODO: קראו למתודה power_on() של הסמארטפון והדפיסו את התוצאה

# TODO: קראו למתודה connect() של הסמארטפון והדפיסו את התוצאה

# TODO: קראו למתודה make_call() של הסמארטפון עם הפרמטר "123-456-7890" והדפיסו את התוצאה
quiz iconבחנו את עצמכם

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

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

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