ما هو تعدد الأشكال في بايثون؟ شرح تعدد الأشكال بالأمثلة

نشرت: 2021-03-05

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

مقدمة

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

سنناقش ميزة مثيرة للاهتمام للبيثون في هذه المقالة. لذلك دعونا نبدأ!

ما هو تعدد الأشكال؟

كلمة تعدد الأشكال مشتق من الكلمة اليونانية بولي (بمعنى كثير) ، والتشكيل (أشكال). هذا يعني أن اسم وظيفة واحدة أو اسم طريقة يمكن أن يكون له أشكال متعددة. وهذا يحقق الرغبة في تجنب تكرار الكود في التنفيذ.

لكن تعدد الأشكال في Python يختلف قليلاً عن تعدد الأشكال في لغات البرمجة الأخرى. تدعم لغات البرمجة مثل java و c ++ تعدد أشكال وقت الترجمة (طريقة التحميل الزائد). في طريقة التحميل الزائد ، يمكن أن يكون للطرق المتعددة نفس اسم الطريقة ولكنها تختلف في توقيع المعلمة. هذه الميزة غير مدعومة من قبل Python. إذا كانت هناك طرق متعددة لها نفس الوظيفة ، فسيتجاوز تنفيذ الوظيفة الأحدث تنفيذ الوظيفة السابق.

وظيفة تعدد الأشكال

يمكن تصنيف تعدد الأشكال الوظيفي في Python إلى تعدد الأشكال المحدد من قبل المستخدم وتعدد الأشكال المحدد مسبقًا.

يمكننا تنفيذ تعدد الأشكال المحدد من قبل المستخدم لاستدعاء نفس الوظيفة بتوقيع معلمة مختلف ، ويمكن اعتبار ذلك بمثابة تعويض بسيط لعدم توفر طريقة التحميل الزائد في بيثون. دعنا ننتقل من خلال رمز المثال

ديف مول (أ ، ب ، ج = 1 ):
إرجاع أ * ب * ج ؛

طباعة (مول ( 1 ، 2 ، 3 ))
طباعة (مول ( 1 ، 2 ))

في الكود أعلاه ، على الرغم من أن عدد المعلمات التي تم تمريرها لا يتساوى ، فإن كلا من عبارات الطباعة تشير إلى نفس الطريقة. في استدعاء الوظيفة الثاني ، يتم تعيين المعلمة c بقيمة افتراضية 1.

وبالمثل ، فإن عددًا قليلاً من الطرق المحددة مسبقًا في Python تعرض ميزات تعدد الأشكال ، حيث يمكن لطريقة واحدة قبول معلمات لأنواع بيانات مختلفة. طرق مثل len () تعرض هذه الميزة. وإليك الكود لتوضيح ذلك.

طباعة (لين ([ 1 ، 2 ، 3 ، 4 ]))
طباعة (لين (( 1 ، 2 ، 3 ، 4 )))
طباعة (لين ( "بيثون" ))
print ({ “key1” : “value1” ، “key2” : “value2” }))

في الكود أعلاه ، يتم استخدام نفس طريقة len () لقائمة ، ومجموعة ، وسلسلة ، وقاموس.

الخروج: تطبيقات Python في العالم الحقيقي

زيادة الحمولة على المشغل

يمكن استخدام عامل مثل "+" بعدة طرق. على سبيل المثال ، يمكن استخدامه لإضافة رقمين ، سلاسل ، بالإضافة إلى القوائم ، إلخ. وإليك الكود لإثبات ذلك.

l1 = [ 1 ، 2 ، 3 ]
l2 = [ 3 ، 4 ، 5 ]

ن 1 = 2
ن 2 = 3

s1 = "مرحبًا"
s2 = "هناك"

طباعة (l + l1)
طباعة (s1 + s2)
طباعة (n1 + n2)

أسلوب التجاوز

يعتبر تجاوز الطريقة أيضًا تعدد أشكال وقت التشغيل ، وهو مدعوم من قبل العديد من اللغات مثل java و c ++ و python.

ترتبط هذه الميزة بالوراثة ، وترث فئة فرعية في لغة بيثون وظائف الأعضاء ومتغيرات العضو من صنفها الأصلي. وإذا شعرنا أن تطبيق طريقة الفصل الأصلي غير مناسب ، فيمكننا تجاوز هذه الطريقة في الفصل الفرعي. ويشار إلى تعديل وظائف الأعضاء وفقًا للمتطلبات في فئة الطفل باسم تجاوز الأسلوب.

الدرجة الثانية :
وقود def (ذاتي):
طباعة ( "عجلتان تحتاجان إلى وقود للتشغيل" )
قدرة مواطنه (الذات):
طباعة ( "الدراجات مناسبة لشخصين كحد أقصى" )

فئة electric_bike (two_wheeler):
وقود def (ذاتي):
طباعة ( "دراجات كهربائية تعمل بالبطارية" )
فئة petrol_bike (two_wheeler):
وقود def (ذاتي):
طباعة ( "دراجة بنزين تعمل بالبنزين" )
الدراجة = two_wheeler ()
ebike = electric_bike ()
pbike = petrol_bike ()

bike.fuel ()
bike.capacity ()
ebike.fuel ()
ebike.capacity ()
pbike.fuel ()
قدرة pbike ()

في الكود أعلاه ، two_wheeler هي الفئة الأم و electric_bike ، petrol_bike هي الفئات الفرعية. وطريقتا الوقود () ، السعة () موروثة عن طريق الفئات الفرعية electric_bike و petrol_bike. الآن ، يمكننا تحديث تنفيذ الطرق إذا لزم الأمر ، وداخل فئة الدراجة الكهربائية ، أعدنا تطبيق طريقة الوقود () ، وبالمثل أعدنا تطبيق طريقة الوقود () في فئة دراجات_الوقود.

على سبيل المثال في الكود يطبع ebike.fuel () "دراجات كهربائية تعمل بالبطارية" ويطبع pbike.fuel () دراجة بنزين تعمل بالبنزين ".

تعدد الأشكال في الطرق الطبقية

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

فئة دراجة :
وقود def (ذاتي):
طباعة ( "الدراجة لا تحتاج إلى أي وقود!" )
قدرة مواطنه (الذات):
print ( "الدراجات مناسبة لركوب شخص واحد" )

فئة electric_bike :
وقود def (ذاتي):
طباعة ( "دراجات كهربائية تعمل بالبطارية" )
قدرة مواطنه (الذات):
طباعة ( "الدراجات الكهربائية مناسبة لشخصين كحد أقصى" )

فئة petrol_bike :
وقود def (ذاتي):
طباعة ( "دراجة بنزين تعمل بالبنزين" )
قدرة مواطنه (الذات):
طباعة ( "دراجات البنزين مناسبة لشخصين كحد أقصى" )

ecobike = دراجة ()
ebike = electric_bike ()
pbike = petrol_bike ()
l = [ecobike، ebike، pbike]

لـ obj in l:
obj.fuel ()
obj.capacity ()

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

على سبيل المثال ، سيستدعي ecobike.fuel () طريقة الوقود () لفئة الدراجة وسيستدعي ebike.fuel () طريقة الوقود () لفئة الدراجة الكهربائية. نلحق كل هذه الكائنات بقائمة وفي كل تكرار ، سنقوم باستدعاء نفس أسماء الوظائف ولكن نوع الكائن الذي يستدعي الطريقة سيتغير. في طرق التكرار الأولى لفئة الدراجة تسمى ، وطرق الدراجة الكهربائية ، دراجة البنزين في المزيد من التكرارات.

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

خاتمة

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

الآن بعد أن أصبحت على دراية بتعدد الأشكال في Python ، قم بتنفيذ كود Python التالي باستخدام كل هذه الميزات!

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

استعد لمهنة المستقبل

الترقية و IIIT-BANGALORE دبلوم PG في علوم البيانات
سجل الآن @ UPGRAD