أنواع الوراثة في بايثون | وراثة بايثون [مع مثال]

نشرت: 2021-02-09

جدول المحتويات

مقدمة

النضال من أجل رمز نظيف هو معركة ينضم إليها جميع المبرمجين. ويمكن التغلب على تلك المعركة بدرع مناسب من مفاهيم البرمجة الشيئية. ويساعدنا الاستخدام المناسب لمفاهيم OOP على تحسين قابلية إعادة استخدام الكود وقابلية القراءة والوقت الأمثل وتعقيد المكان.

البرمجة في بايثون هي متعة فائقة. لديها عدد هائل من دعم المكتبات ، وقابلية برمجة واجهة المستخدم الرسومية الموجهة للكائنات ، مما يجعلها كعكة ساخنة بين جميع لغات البرمجة.

الوراثة هي واحدة من أكثر الميزات الموجهة للكائنات استخدامًا وتنفيذها في Python مهمة حماسية. لذا ، لنبدأ الآن!

أول الأشياء أولاً دعونا نفهم تعريف الميراث.

ميراث

الوراثة هي عملية الحصول على الخصائص والخصائص (المتغيرات والطرق) لفئة أخرى. في هذا الترتيب الهرمي ، يُطلق على الفئة التي ترث فئة أخرى فئة فرعية أو فئة فرعية ، والفئة الأخرى هي الفئة الأصلية.

يتم تصنيف الميراث بناءً على التسلسل الهرمي المتبع وعدد الفئات الرئيسية والفئات الفرعية المعنية.

الميراث خمسة أنواع:

  1. الميراث الواحد
  2. تعدد الميراث
  3. الوراثة متعددة المستويات
  4. الوراثة الهرمية
  5. الوراثة الهجينة

الميراث الواحد

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

# فئة الوالدين
فئة أعلاه :
أنا = 5
def fun1 (النفس):
طباعة ( "مرحبًا ، أنت في فصل الوالدين" )

#subclass
فئة أدناه (أعلاه):
أنا = 10
def fun2 (النفس):
طباعة ( "مرحبًا ، أنت في الفئة الفرعية" )

temp1 = أقل من ()
temp2 = أعلى ()
temp1.fun1 ()
temp1.fun2 ()
temp2.fun1 ()
طباعة (temp1.i)
طباعة (temp2.i)
# temp2.fun2 ()

حسنًا ، دعنا نتصفح الكود أعلاه.

في الكود أعلاه "أعلاه" هي الفئة الأصلية و "أدناه" هي الفئة الفرعية التي ترث الفئة الأصلية. يعد تنفيذ الوراثة في Python مهمة بسيطة ، نحتاج فقط إلى ذكر اسم الفئة الأصل بين أقواس الفئة الفرعية. نحن نصنع كائنات من فئة الوالدين والطبقة الفرعية ، وهنا تأتي نقطة مثيرة للاهتمام حول الميراث. يمكن للفئة الفرعية الوصول إلى الطرق والمتغيرات الخاصة بالفئة الأصلية ، في حين أن العكس بالعكس ليس صحيحًا.

لذلك في الكود أعلاه ، يمكن للكائن temp1 الوصول إلى كل من طريقتين fun1 و fun2 بينما يمكن للكائن temp2 الوصول إلى طريقة fun1 فقط. وبالمثل ، تنطبق نفس القاعدة على المتغيرات في الكود. والوصول إلى طريقة فئة فرعية أو متغير من كائن فئة أصل سيؤدي إلى حدوث خطأ. إذا لم يتم التعليق على السطر الأخير في الكود ، فسيؤدي ذلك إلى حدوث خطأ.

تعدد الميراث

يتيح هذا الميراث للفئة التابعة أن ترث من أكثر من فئة أصل واحد. لا تدعم فئات جافا هذا النوع من الوراثة ، لكن بيثون تدعم هذا النوع من الوراثة. تتمتع بميزة هائلة إذا كان لدينا متطلبات لجمع خصائص متعددة من فئات مختلفة.

# فئة الوالدين 1
فئة أ :
demo1 = 0
def fun1 (النفس):
طباعة (self.demo1)

# فئة الوالدين 2
فئة ب :
demo2 = 0
def fun2 (النفس):
طباعة (self.demo2)

# الطفل الصف
الفئة ج (أ ، ب):
def fun3 (النفس):
طباعة ( "مرحبًا ، أنت في الفصل الدراسي" )

# كود الرئيسي
ج = ج ()
c.demo1 = 10
c.demo2 = 5
c.fun3 ()
print ( "الرقم الأول هو:" ، c.demo1)
print ( "الرقم الثاني هو:" ، c.demo2)

في الكود أعلاه ، أنشأنا فئتين أساسيتين "أ" ، "ب". باتباع صيغة الوراثة في لغة python ، أنشأنا فئة فرعية ترث كلا الفئتين "A" و "B". كما تمت مناقشته سابقًا ، يمكن للفئة الفرعية الوصول إلى طرق ومتغيرات الفئة الأصلية ، يمكن للفئة الفرعية "C" الوصول إلى طرق صنفها الأصلي.

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

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

# فئة الوالدين 1
مركبة فئة :
وظيفة def (الذات):
print ( "تستخدم المركبات للنقل" )

# فئة الطفل 1
فئة السيارة (مركبة):
عجلات def (ذاتية):
طباعة ( "سيارة لها 4 عجلات" )

# فئة الطفل 2
فئة electric_car (سيارة):
التخصص الدقيق (ذاتي):
طباعة ( "سيارة كهربائية تعمل بالكهرباء" )

electric = electric_car ()
electric.speciality ()
عجلات كهربائية ()
electric.functioning ()

بعد إجراء عملية التجفيف على الكود أعلاه ، أنشأنا "مركبة" من الدرجة ، ثم أنشأنا سيارة فئة ترث مركبة الفئة. الآن "السيارة" هي فئة الوالدين و "السيارة" هي فئة الأطفال. في وقت لاحق ، أنشأنا فئة "electric_car" ، والآن أصبحت فئة السيارة عبارة عن فئة أم وفئة electric_car هي فئة فرعية ، والعلاقة بين فئة السيارة وفئة electric_car هي الميراث متعدد المستويات.

هنا يمكن لفئة electric_car الوصول إلى الطرق والمتغيرات الخاصة بكل من فئة السيارة والسيارة ، بينما يمكن لفئة السيارة الوصول فقط إلى الطرق ومتغيرات فئة السيارة. وكما تمت مناقشته ، لا يمكن لمركبة فئة الوالدين الوصول إلى أي طريقة لفئة الطفل.

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

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

# فئة الوالدين
والد فئة :
def fun1 (النفس):
طباعة ( "مرحبًا ، أنت في فصل الوالدين" )

# فئة الطفل 1
class child1 (الوالدين):
def fun2 (النفس):
طباعة ( "مرحبًا ، أنت في الصف الأول للأطفال" )

# فئة الطفل 2
class child2 (الوالدين):
def fun3 (النفس):
طباعة ( "مرحبًا ، أنت في الصف الثاني للأطفال" )

# فئة الطفل 3
class child3 (الوالدين):
def fun4 (النفس):
طباعة ( "مرحبًا ، أنت في الصف الثالث للأطفال" )

# البرنامج الرئيسي
child_obj1 = child3 ()
child_obj2 = child2 ()
child_obj3 = child1 ()
child_obj1.fun1 ()
child_obj1.fun4 ()
child_obj2.fun1 ()
child_obj2.fun3 ()
child_obj3.fun1 ()
child_obj3.fun2 ()

في الكود أعلاه ، لدينا فئة أصل واحد وفئات فرعية متعددة ترث نفس فئة الأصل. الآن يمكن لجميع الفئات الفرعية الوصول إلى أساليب ومتغيرات الفئة الأصلية. لقد أنشأنا فصلًا دراسيًا "الوالدين" و 3 صفوف فرعية "child1" ، "child2" ، "child3" ، والذي يرث نفس فئة الأصل "Parent".

الخروج: أفكار مشروع بايثون مفتوح المصدر

الوراثة الهجينة

يُقال عن الميراث الميراث المختلط إذا تم تنفيذ أكثر من نوع واحد من الميراث في نفس الكود. تتيح هذه الميزة للمستخدم الاستفادة من ميزة الميراث في أفضل حالاتها. هذا يفي بمتطلبات تنفيذ قانون يحتاج إلى العديد من الميراث في التنفيذ.

فئة أ:
def fun1 (النفس):
اطبع ("مرحبًا ، أنت في الفئة أ") الفئة ب (أ):
def fun2 (النفس):
اطبع ("مرحبًا ، أنت في الفئة ب") الفئة ج (أ):
def fun3 (النفس):
اطبع ("مرحبًا ، أنت في الفئة C") الفئة D (C ، A): # line 13
def fun4 (النفس):
print ("مرحبًا ، أنت في الصف D") # البرنامج الرئيسي
المرجع = D ()
المرجع .fun4 ()
المرجع .fun3 ()
المرجع .fun1 ()

في الكود أعلاه ، يمكننا أن نرى أننا قمنا بتنفيذ أكثر من نوع واحد من الميراث. تطبق الفئات A و B و C الميراث الهرمي والفئات A و C و D تنفذ الوراثة متعددة المستويات. نوي أن تلك الميراث الفردية لها خصائصها الفردية في الوصول إلى الأساليب والمتغيرات الخاصة بالفئة الأم. أيضا ، هناك نقطة يجب ملاحظتها.

عندما ننفذ الوراثة متعددة المستويات ، فإننا نتبع بناء جملة مثل "child_class (parent_class1 ، parent_class2)". لكن بناء الجملة هذا سيؤدي إلى خطأ إذا كان "parent_class1" أعلى بشكل هرمي "parent_class2". إذا أردنا تنفيذ بناء الجملة هذا ، فيجب أن يكون "parent_class1" في مستوى أدنى تراتبيًا من "parent_class2". على سبيل المثال في الكود أعلاه ، إذا كان السطر 13 يحتوي على فئة بناء جملة D (A ، C) ، فلن يعمل الرمز نظرًا لأن الفئة C أقل هرمياً من الفئة A.

تعلم دورات علوم البيانات من أفضل الجامعات في العالم. اربح برامج PG التنفيذية أو برامج الشهادات المتقدمة أو برامج الماجستير لتتبع حياتك المهنية بشكل سريع.

قراءة: مواضيع وأفكار مشروع بايثون

خاتمة

لقد مررنا باستخدامات واحتياجات الميراث وفهمنا تعريف الميراث. أيضًا ، لقد راجعنا أنواع الميراث وتصفحنا رموز التنفيذ وتفسيرات كل نوع من أنواع الميراث. فهم قواعد المتغيرات وطريقة الوصول في أنواع مختلفة من الميراث.

الآن بعد أن أصبحت على دراية بأنواع الميراث المختلفة في Python ، حاول تنفيذها وحاول استخدامها في التعليمات البرمجية الخاصة بك. حاول تحسين التعليمات البرمجية الخاصة بك من خلال الاستخدام الصحيح للوراثة.

إذا كنت مهتمًا بالتعرف على علوم البيانات ، فراجع دبلوم PG في IIIT-B & upGrad في علوم البيانات والذي تم إنشاؤه للمهنيين العاملين ويقدم أكثر من 10 دراسات حالة ومشاريع ، وورش عمل عملية عملية ، وإرشاد مع خبراء الصناعة ، 1- على - 1 مع موجهين في الصناعة ، وأكثر من 400 ساعة من التعلم والمساعدة في العمل مع الشركات الكبرى.

ما هو الفرق بين الميراث المتعدد والميراث متعدد المستويات؟

غالبًا ما يتم الخلط بين العديد من المبرمجين المبتدئين بين الميراث المتعدد والميراث متعدد المستويات. يوضح ما يلي بعض الاختلافات الهامة بين هذين النوعين من الميراث.
تعدد الميراث -
1. عندما ترث فئة فرعية خصائصها وخصائصها من أكثر من فئة أساسية واحدة ، يُعرف هذا النوع من الوراثة باسم الوراثة المتعددة.
2. لا يتم استخدامه على نطاق واسع لأن فهم الوراثة المتعددة يمكن أن يكون معقدًا جدًا للفهم.
3. تتكون من مستويين فقط من الفئات: الفئة الأساسية والفئة المشتقة.
الوراثة متعددة المستويات
1. الميراث الذي ترث فيه فئة فرعية الخصائص من صنفها الأساسي الذي يرث الخصائص من فئة أساسية أخرى ، مما يجعل الفئة الفرعية تُعرف باسم الوراثة متعددة المستويات.
2. يخدم هذا الميراث أغراضًا عظيمة وبالتالي يستخدم على نطاق واسع.
3. يحتوي على ثلاثة مستويات على الأقل من الفئات: الفئة الأساسية والفئة المتوسطة والفئة المشتقة.

ماذا تفهم عن الوراثة الهجينة؟

الوراثة الهجينة هي نوع فريد من الوراثة. بدلاً من وجود مفهوم جديد ، كما يوحي اسمه ، فهو مزيج من نوعين أو أكثر من أنواع الميراث. على سبيل المثال ، تعتبر الفئة التي تعرض الميراث متعدد المستويات ومتعدد المستويات مثالاً على الوراثة الهجينة.

ماذا تعرف عن معدِّلات الوصول في بايثون؟

في Python ، هناك 3 أنواع من مُعدِّلات الوصول المذكورة أدناه:
1. مُعدِّل الوصول العام - يمكن الوصول إلى أعضاء الفئة العامة من خلال أي جزء من البرنامج. في Python ، إذا لم يتم تحديد محدد الوصول لأعضاء البيانات أو وظائف الأعضاء ، فسيكون عامًا افتراضيًا.
2. معدّل الوصول المحمي - إذا تم تعريف عضو البيانات أو وظيفة العضو على أنها محمية ، فلا يمكن الوصول إليها إلا من خلال الفئات المشتقة من تلك الفئة.
3. معدّل الوصول الخاص - معدّل الوصول الخاص هو محدد الوصول الأكثر أمانًا. يمكن الوصول إلى الأعضاء الخاصين فقط داخل الفصل الدراسي الذي تم تعريفهم فيه.