دالة ()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() # استدعِ method الأب أولاً
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 مع سمتي الاسم والعمرemployee.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
# Expected output: "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
الملفات الخارجيةمقدمة في OOPClasses مقابل Objectsمعامل selfMethodsAttributesدالة البناء (__init__)مراجعة - آلة حاسبة بسيطة4الوراثة
الوراثة الأساسيةدالة ()superإعادة تعريف الدوال (Method Overriding)الوراثة المتعددةترتيب استدعاء الدوال (Method Resolution Order)مراجعة - هيكلية الموظفين5تعدد الأشكال
مراجعة إعادة تعريف الدوالمفهوم Duck Typingالأصناف والدوال المجردةتصميم الواجهاتملخص - حاسبة الأشكالتدرّب بنفسك: مترجم Python عبر الإنترنت