الدرس 52 من 56 · إثراء من كتاب بايثون للجيمي

الوراثة — الصفوف تكبر عائلة

تعرفنا على الصفوف (class) سابقاً — كائن يخدماته وصفاته. الوراثة تاخذ الفكرة لبعدها: صف جديد يرث كل شي من صف أب، ويضيف عليه أو يعدله:

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

class Dog(Animal):          # الصف ابن Animal
    def speak(self):        # تجاوز — تعديل سلوك الأب
        return "هو باارك!"

class Cat(Animal):
    def __init__(self, name, indoor):
        super().__init__(name)   # نداء أب: يجهز الاسم
        self.indoor = indoor

rex = Dog("ريكس")
milu = Cat("ميشو", True)
print(rex.speak())     # هو باارك!
print(milu.speak())    # ...
print(milu.indoor)    # True

القواعد الذهبية:

1. الصف الابن ياخذ كل صفات الأب وأفعاله مجاناً.

2. التجاوز (override): تعريف نفس الدالة بالابن يستبدل نسخة الأب.

3. super() نداء على الأب من داخل الابن — نستخدمها في __init__ لما نبقي تجهيز الأب ونضيف عليه.

ليش الوراثة؟ بدل ما تعيد كتابة «الاسم + الوصف» بكل صف، تكتبها مرة بالأب — والتعديل عليها ينتشر لكل العائلة.

اختبار سريع للدرس

جاوب على كل الأسئلة — لازم كلها صح. إذا غلطت بيطلع صندوق ذهبي يفهّمك وش الخطأ. مو عيب تغلط، كل مبرمج بالعالم غلط وأخذ منها درس.

1. وش ترث Dog من Animal؟
2. وش يسوي super().__init__(name)؟
3. وش يصير لما يعرف الابن دالة موجودة عند الأب بنفس الاسم؟
الدرس 51 الدرس 53 — JSON — بايثون يتكلم لغة الإنترنت
FeLiXFeLiX AI — مساعد المنصتين