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

الوراثة المتعددة

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

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

إليك فئتان أساسيتان (parent classes):

class Animal:
    def __init__(self, name):
        self.name = name
    
    def eat(self):
        return f"{self.name} is eating"

class Flyable:
    def fly(self):
        return f"{self.name} is flying"

أنشئ فئة فرعية ترث من كلا الأبوين:

class Bird(Animal, Flyable):
    def __init__(self, name, species):
        super().__init__(name)  # يستدعي __init__ الخاصة بـ Animal
        self.species = species
    
    def sing(self):
        return f"{self.name} is singing"

الصيغة class Bird(Animal, Flyable): تعني أن Bird يرث من كل من Animal و Flyable.

أنشئ كائن طائر واستخدم الدوال (methods) من كلا الأبوين:

sparrow = Bird("Sparrow", "House sparrow")

استدعاء الدوال من الفئة الأب الأولى:

print(sparrow.eat())

استدعاء الدوال (methods) من الفئة الأب الثانية:

print(sparrow.fly())

استدعِ الطريقة الخاصة بالطائر:

print(sparrow.sing())

المخرجات:

Sparrow is eating
Sparrow is flying
Sparrow is singing

يمكنك التحقق من ترتيب الوراثة:

print(Bird.__mro__)  # ترتيب حل الأساليب (Method Resolution Order)

يوضح هذا أي فئة أب يتم التحقق منها أولاً عند البحث عن الدوال (methods).

نقطة رئيسية: تستخدم الوراثة المتعددة صيغة class Child(Parent1, Parent2):. تحصل الفئة التابعة على جميع الدوال (methods) من جميع الفئات الأصلية. يقوم Python بفحص الفئات الأصلية من اليسار إلى اليمين عند البحث عن الدوال.

challenge icon

التحدي

متوسط

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

ستحتاج إلى تعديل هذه الملفات:

  • device.py - قم بتنفيذ الفئة الأساسية Device
  • internet.py - قم بتنفيذ الفئة الأساسية Internet
  • smartphone.py - قم بتنفيذ الفئة Smartphone التي ترث من كلتا الفئتين الأساسيتين
  • driver.py - قم بتنفيذ حالات الاختبار التي ستتحقق من أن تنفيذك يعمل بشكل صحيح

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

ورقة مرجعية

يسمح التعدد في الوراثة (Multiple inheritance) للفئة بالوراثة من أكثر من فئة أب واحدة باستخدام الصيغة class Child(Parent1, Parent2):

class Animal:
    def __init__(self, name):
        self.name = name
    
    def eat(self):
        return f"{self.name} is eating"

class Flyable:
    def fly(self):
        return f"{self.name} is flying"

class Bird(Animal, Flyable):
    def __init__(self, name, species):
        super().__init__(name)  # Calls Animal's __init__
        self.species = species
    
    def sing(self):
        return f"{self.name} is singing"

ترث الفئة الابنة جميع الدوال (methods) من جميع فئات الآباء:

sparrow = Bird("Sparrow", "House sparrow")
print(sparrow.eat())   # من فئة Animal
print(sparrow.fly())   # من فئة Flyable
print(sparrow.sing())  # دالة خاصة بفئة Bird

تحقق من ترتيب دقة الدوال (Method Resolution Order - MRO) لمعرفة أي فئة أب يتم التحقق منها أولاً:

print(Bird.__mro__)  # يعرض ترتيب الوراثة

جرّب بنفسك

# TODO: استيراد فئة Smartphone من smartphone.py

# إنشاء هاتف ذكي واختبار وظائفه
# TODO: إنشاء كائن Smartphone بالعلامة التجارية "Apple" والطراز "iPhone 13"
my_phone = None

# TODO: استدعاء وطباعة وظيفة power_on() للهاتف الذكي

# TODO: استدعاء وطباعة وظيفة connect() للهاتف الذكي

# TODO: استدعاء وطباعة وظيفة make_call() للهاتف الذكي مع المعامل "123-456-7890"
quiz iconاختبر نفسك

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

جميع دروس Object Oriented Programming