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