הפונקציה super()
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Python של Coddy. שיעור 18 מתוך 64.
הפונקציה super() מאפשרת למחלקת צאצא לקרוא למתודות ממחלקת האב שלה. כך אפשר להרחיב את הפונקציונליות של מחלקת האב במקום להחליף אותה לחלוטין.
הנה דוגמה לשימוש ב־super() בבנאי:
class Animal:
def __init__(self, name):
self.name = name
print(f"Animal created: {name}")
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name) # קרא ל-__init__ של מחלקת האב
self.breed = breed
print(f"Dog breed set: {breed}")צרו אובייקט כלב:
buddy = Dog("Buddy", "Golden Retriever")
print(f"Name: {buddy.name}, Breed: {buddy.breed}")פלט:
Animal created: Buddy
Dog breed set: Golden Retriever
Name: Buddy, Breed: Golden Retrieverהשתמשו ב-super() כדי להרחיב מתודות של מחלקת האב:
class Animal:
def make_sound(self):
print("Generic animal sound")
class Dog(Animal):
def make_sound(self):
super().make_sound() # קרא קודם למתודה של מחלקת האב
print("Woof!") # הוסף התנהגות ייחודית לכלבקרא למתודה המורחבת:
buddy = Dog()
buddy.make_sound()פלט:
Generic animal sound
Woof!בלי super(), תאבדו את הפונקציונליות של מחלקת האב:
class Cat(Animal):
def make_sound(self):
print("Meow!") # רק הצליל של החתול, מתעלמים מהמתודה של מחלקת האב
cat = Cat()
cat.make_sound()פלט:
Meow!נקודה חשובה: השתמשו ב־super() כדי לקרוא למתודות של מחלקת האב מתוך מחלקות צאצא. כך תוכלו להרחיב את הפונקציונליות במקום להחליף אותה לחלוטין. שימושים נפוצים כוללים קריאה למתודות __init__ של מחלקת האב והרחבת ההתנהגות שלה.
אתגר
בינוניבאתגר הזה תממש היררכיית מחלקות של Person ו-Employee באמצעות ירושה.
person.py: מכיל את המחלקה Person עם מאפייני name ו-ageemployee.py: מכיל את המחלקה Employee שיורשת מ-Persondriver.py: הקובץ הראשי לבדיקת המימוש שלך
כל קובץ מכיל הערות TODO מפורטות שינחו אותך בתהליך המימוש.
נסו בעצמכם
# TODO: ייבא את המחלקה Person מתוך person.py
# TODO: ייבא את המחלקה Employee מתוך employee.py
def main():
# TODO: צור אובייקט מסוג Person עם השם "Alice" והגיל 30
person = None
# TODO: צור אובייקט מסוג Employee עם השם "Bob", הגיל 35 והתפקיד "Developer"
employee = None
# TODO: קרא למתודה introduce() של האובייקט Person
# פלט צפוי: "Hi, I'm Alice and I'm 30 years old"
# TODO: הדפס שורה ריקה ליצירת רווח - print()
# TODO: קרא למתודה introduce() של האובייקט Employee
# פלט צפוי:
# "Hi, I'm Bob and I'm 35 years old"
# "I work as a Developer"
if __name__ == "__main__":
main()השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים (OOP)
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםהפרמטר selfמתודותמאפייניםשיטת הבנאי (__init__)חזרה: מחשבון פשוט5פולימורפיזם
בחינה מחדש של דריסת מתודותטיפוסיות ברווזמחלקות ומתודות אבסטרקטיותעיצוב ממשקיםסיכום – מחשבון צורות8מושגים מתקדמים בתכנות מונחה עצמים
קומפוזיציה לעומת הורשהMixinsמתודות סטטיות ומתודות מחלקהדקורטורים למחלקותמנהלי הקשרתרגלו בעצמכם: קומפיילר Python אונליין