الوراثة الهرمية

13.4 الوراثة الهرمية

أهداف التعلم

في نهاية هذا القسم، ينبغي أن تكون قادرًا على

  • تحديد العلاقات بين الأصناف كأنواع من الوراثة.
  • بناء أصناف تشكل وراثة هرمية.

أساسيات الوراثة الهرمية

الوراثة الهرمية نوع من الوراثة ترث فيه أصناف متعددة من صنف أب واحد. الوراثة متعددة المستويات (Multilevel inheritance) نوع من الوراثة يصبح فيه الصنف الفرعي صنفًا أبًا لصنف آخر. يؤدي الجمع بين الوراثة الهرمية والوراثة متعددة المستويات إلى إنشاء تنظيم هرمي للأصناف يشبه الشجرة.

نقطة تحقق

التنظيم الهرمي وأنواع الوراثة

مفاهيم تطبيقية

التنظيم الهرمي

1.
أي مما يلي يُعد مثالاً على الوراثة الهرمية؟
  1. الصنف B يرث من الصنف A
    الصنف C يرث من الصنف A
  2. الصنف B يرث من الصنف A
    الصنف C يرث من الصنف B
  3. الصنف B يرث من الصنف A
    الصنف C يرث من الصنف D
2.
لأي مجموعة من الأصناف تكون الوراثة الهرمية مناسبة؟
  1. Cat, Dog, Bird
  2. Employee, Developer, SalesRep
  3. Dessert, BakedGood, ApplePie

تطبيق الوراثة الهرمية

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

مثال 13.4

أعضاء الجوقة

    class ChoirMember:
      def display(self):
        print("Current choir member")

    class Soprano(ChoirMember):
      def display(self):
        super().display()
        print("Part: Soprano")

    class Soprano1(Soprano):
      def display(self):
        super().display()
        print("Division: Soprano 1")

    class Alto(ChoirMember):
      def display(self):
        super().display()
        print("Part: Alto")

    class Tenor(ChoirMember):
      def display(self):
        super().display()
        print("Part: Tenor")

    class Bass(ChoirMember):
      def display(self):
        super().display()
        print("Part: Bass")

    mem_10 = Alto()
    mem_13 = Tenor()
    mem_15 = Soprano1()

    mem_10.display()
    print()
    mem_13.display()
    print()
    mem_15.display()

مخرجات الشِفرة هي:

    Current choir member
    Part: Alto

    Current choir member
    Part: Tenor

    Current choir member
    Part: Soprano
    Division: Soprano 1

مفاهيم تطبيقية

تطبيق الوراثة الهرمية

تأمل البرنامج التالي:

    class A:
      def __init__(self, a_attr=0):
        self.a_attr = a_attr

    class B(A):
      def __init__(self, a_attr=0, b_attr=0):
        super().__init__(a_attr)
        self.b_attr = b_attr

    class C(A):
      def __init__(self, a_attr=0, c_attr=0):
        super().__init__(a_attr)
        self.c_attr = c_attr

    class D(B):
      def __init__(self, a_attr=0, b_attr=0, d_attr=0):
        super().__init__(a_attr, b_attr)
        self.d_attr = d_attr
    
    b_inst = B(2)
    c_inst = C(c_attr=4)
    d_inst = D(6, 7)
3.
ما هي قيمة b_inst.b_attr؟
  1. 0
  2. 2
  3. Error
4.
ما هي السمات التي يمكن لـ c_inst الوصول إليها؟
  1. a_attr
  2. a_attr, c_attr
  3. c_attr
5.
ما هي السمات التي يمكن لـ d_inst الوصول إليها؟
  1. b_attr, d_attr
  2. a_attr, b_attr, d_attr
  3. d_attr

جرّب بنفسك

إعادة تعريف التوابع

عرّف ثلاثة أصناف: Instrument، وWoodwind، وString.

  • Instrument لديه سمة مثيل owner، بقيمة افتراضية هي "unknown".
  • Woodwind يرث من Instrument ولديه سمة مثيل material بقيمة افتراضية هي "wood".
  • String يرث من Instrument ولديه سمة مثيل num_strings، بقيمة افتراضية هي 4.

يجب أن تتطابق المخرجات مع ما يلي:

    This flute belongs to unknown and is made of silver
    This cello belongs to Bea and has 4 strings