Menu
Coddy logo textTech

הפונקציה 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__ של מחלקת האב והרחבת ההתנהגות שלה.

challenge icon

אתגר

בינוני

באתגר הזה תממש היררכיית מחלקות של Person ו-Employee באמצעות ירושה.

  • person.py: מכיל את המחלקה Person עם מאפייני name ו-age
  • employee.py: מכיל את המחלקה Employee שיורשת מ-Person
  • driver.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()
quiz iconבחנו את עצמכם

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

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

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