Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

دالة ()super

جزء من قسم Object Oriented Programming في رحلة Python على Coddy — الدرس 18 من 64.

تسمح الدالة super() للفئة الفرعية (child class) باستدعاء دوال من فئتها الأصلية (parent class). يتيح لك ذلك توسيع وظائف الفئة الأصلية بدلاً من استبدالها بالكامل.

إليك مثال على استخدام super() في المُنشئ (constructor):

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() لتوسيع دوال الفئة الأب (parent methods):

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() لاستدعاء دوال الفئة الأب (parent class) من الفئات الأبناء (child classes). يتيح لك ذلك توسيع الوظائف بدلاً من استبدالها بالكامل. تشمل الاستخدامات الشائعة استدعاء دوال __init__ الخاصة بالأب وتوسيع سلوك الأب.

challenge icon

التحدي

متوسط

في هذا التحدي، ستقوم بتنفيذ هيكلية فئات Person و Employee باستخدام الوراثة.

  • person.py: يحتوي على فئة Person مع سمات name و age
  • employee.py: يحتوي على فئة Employee التي ترث من Person
  • driver.py: الملف الرئيسي لاختبار تنفيذك

يحتوي كل ملف على تعليقات TODO مفصلة لإرشادك خلال التنفيذ.

ورقة مرجعية

تسمح دالة super() للفئة الفرعية (child class) باستدعاء دوال من فئتها الأصلية (parent class)، مما يؤدي إلى توسيع الوظائف بدلاً من استبدالها.

استخدام super() في الدوال الإنشائية (constructors):

class Animal:
    def __init__(self, name):
        self.name = name

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)  # استدعاء __init__ الخاصة بالفئة الأصلية
        self.breed = breed

استخدام super() لتوسيع الدوال:

class Animal:
    def make_sound(self):
        print("Generic animal sound")

class Dog(Animal):
    def make_sound(self):
        super().make_sound()  # استدعاء دالة الفئة الأصلية أولاً
        print("Woof!")        # إضافة سلوك خاص بالفئة الفرعية

بدون super(): تقوم دوال الفئة الفرعية باستبدال وظائف الفئة الأصلية تماماً بدلاً من توسيعها.

جرّب بنفسك

# 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اختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming