NahdaAIنهضة
Python • المستوى الثالث • الدرس 2

الوراثة وإعادة الاستخدام (Inheritance & Polymorphism)

العودة لفهرس المستوى

أهداف الدرس العلمية

  • إنشاء أصناف أبناء (Subclasses) ترث الخواص والدوال من الصنف الأب.
  • إعادة تعريف الدوال (Method Overriding) لتحقيق التعددية الشكلية (Polymorphism).
  • استخدام دالة super() لاستدعاء Constructor الصنف الأب.
  • التحقق من العلاقة بين الأصناف باستخدام isinstance().

1. قوة الوراثة في Python

تسمح لك الوراثة بنقل وظائف الصنف الأب لأصناف فرعية بدون إعادة كتابة الكود، مع إمكانية تعديل سلوك بعض الدوال حسب الحاجة.

python
class Vehicle:
    def __init__(self, brand):
        self.brand = brand

    def move(self):
        return "المركبة تتحرك"

class Car(Vehicle):        # ← Car يرث من Vehicle
    def move(self):        # ← إعادة تعريف (Override)
        return f"سيارة {self.brand} تسير على الطريق"

class Plane(Vehicle):
    def move(self):
        return f"طائرة {self.brand} تطير في السماء"

# Polymorphism: نفس الاستدعاء، سلوك مختلف
for v in [Car("تويوتا"), Plane("بوينج")]:
    print(v.move())

2. المفاهيم الأساسية للوراثة

🧬 Inheritance

الصنف الابن يرث خصائص وميثودات الصنف الأب:

class Dog(Animal):
    pass
🔄 Override

إعادة تعريف ميثود موجودة في الأب:

def speak(self):
    return "مياو"
⬆️ super()

استدعاء Constructor الأب من الابن:

super().__init__(name, sound)
🎭 Polymorphism

نفس الاستدعاء، سلوك مختلف حسب الكائن:

for a in animals:
    a.speak()
التطبيق العملي المباشر

تحدي الدرس الثاني: عائلة كاملة من الحيوانات

قم بالتعديل على الكود بداخل المحرر أدناه لتطبيق المتطلبات التالية:

  1. أنشئ صنفاً جديداً Cat يرث من Animal ويُعيد تعريف speak() ليقول "مياو مياو".
  2. أنشئ صنفاً آخر Cow يرث من Animal مع استخدام super().__init__() لإضافة خاصية milk_liters.
  3. أضف ميثود produce_milk() داخل Cow تُرجع كمية الحليب.
  4. أنشئ 3 كائنات: my_dog، my_cat، my_cow.
  5. استخدم حلقة for على القائمة [my_dog, my_cat, my_cow] لاستدعاء speak() على كل كائن (Polymorphism).
  6. اختبر isinstance(my_dog, Animal) للتأكد من الوراثة.
⏳ جارٍ تحميل المحرر التفاعلي...