تعدد الأشكال في Python مع الأمثلة

⚡ ملخص ذكي

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

  • 🔘 فريف: تعني تعدد الأشكال "أشكالًا متعددة"، مما يسمح لواجهة واحدة بالعمل على أنواع أو فئات بيانات مختلفة.
  • ☑️ Operaالتحميل الزائد لـ Tor: يقوم عامل الجمع (+) بإضافة الأرقام ولكنه يقوم أيضاً بربط السلاسل النصية، مما يدل على تعدد أشكال عوامل التشغيل.
  • ✅ الوظائف المضمنة: تعمل وظائف مثل len() على السلاسل النصية والقوائم والقواميس على حد سواء.
  • 🧪 الأساليب التي يحددها المستخدم: يمكن للفئات أن تتشارك أسماء الطرق مثل area() و perimeter() لأشكال مختلفة.
  • 🛠️ ميراث: تتيح خاصية تجاوز الأساليب للفئة الفرعية إعادة تعريف أسلوب الفئة الأصلية في وقت التشغيل.
  • 🤖 أهمية الذكاء الاصطناعي: تعيد مكتبات التعلم الآلي استخدام الواجهات المشتركة مثل fit() و forward() عبر النماذج.

تعدد الأشكال في Python

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

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

تعدد الأشكال في Operaالاختصاصات

عامل في Python يساعد في أداء المهام الحسابية والعديد من المهام البرمجية الأخرى. على سبيل المثال، يساعد عامل "+" في إجراء عملية الجمع بين نوعين صحيحين في Pythonوبنفس الطريقة، يساعد نفس المشغل في ربط السلاسل في Python برمجة.

لنأخذ مثالاً على + (زائد) المشغل في Python لعرض تطبيق تعدد الأشكال في Python كما هو مبين أدناه:

Python Code:

p = 55
q = 77
r = 9.5
g1 = "Guru"
g2 = "99!"
print("the sum of two numbers",p + q)
print("the data type of result is",type(p + q))
print("The sum of two numbers",q + r)
print("the data type of result is", type (q + r))
print("The concatenated string is", g1 + g2)
print("The data type of two strings",type(g1 + g2))

الإخراج:

the sum of two numbers 132
the data type of result is <class 'int'>

The sum of the two numbers 86.5
the data type of result is <class 'float'>

The concatenated string is Guru99!
The data type of two strings <class 'str'>

يمكن أيضًا اعتبار المثال أعلاه بمثابة مثال على التحميل الزائد للمشغل.

تعدد الأشكال في الأساليب المحددة من قبل المستخدم

طريقة محددة من قبل المستخدم في Python لغة البرمجة هي طرق يقوم المستخدم بإنشائها، ويتم الإعلان عنها باستخدام الكلمة الأساسية def مع اسم الوظيفة.

تعدد الأشكال في Python يتم تحقيق لغة البرمجة من خلال طريقة التحميل الزائد والتجاوز. Python يحدد الأساليب باستخدام الكلمة الأساسية def وبنفس الاسم في كل من الفئة الفرعية والأصلية.

دعونا نأخذ المثال التالي كما هو موضح أدناه: -

Python Code:

from math
import pi
class square:
    def __init__(self, length):
    self.l = length
def perimeter(self):
    return 4 * (self.l)
def area(self):
    return self.l * self.l
class Circle:
    def __init__(self, radius):
    self.r = radius
def perimeter(self):
    return 2 * pi * self.r
def area(self):
    return pi * self.r * * 2
# Initialize the classes
sqr = square(10)
c1 = Circle(4)
print("Perimeter computed for square: ", sqr.perimeter())
print("Area computed for square: ", sqr.area())
print("Perimeter computed for Circle: ", c1.perimeter())
print("Area computed for Circle: ", c1.area())

الإخراج:

Perimeter computed for square:  40
Area computed for square:  100
Perimeter computed for Circle:  25.132741228718345
Area computed for Circle:  50.26548245743669

في الكود أعلاه، هناك طريقتان محددتان من قبل المستخدم، المحيط والمساحة، محددتان في فئات الدائرة والمربع.

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

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

الوظائف المضمنة في Python تم تصميمها وجعلها متوافقة لتنفيذ العديد من أنواع البيانات. في Python، len() هي إحدى الدوال المدمجة الرئيسية.

يعمل هذا البرنامج مع أنواع بيانات متعددة: القوائم، والصفوف، والسلاسل النصية، والقواميس. وتُعيد الدالة len() معلومات محددة تتوافق مع هذه الأنواع المتعددة من البيانات.

يوضح الشكل التالي كيفية تطبيق تعدد الأشكال في Python فيما يتعلق بالوظائف المضمنة: –

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

يساعد البرنامج التالي في توضيح تطبيق تعدد الأشكال في Python: -

Python Code:

print ("The length of string Guru99 is ",len("Guru99"))
print("The length of list is ",len(["Guru99","Example","Reader"]))
print("The length of dictionary is ",len({"Website name":"Guru99","Type":"Education"}))

الإخراج:

The length of string Guru99 is 6
The length of the list is 3
The length of the dictionary is 2

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

في المثال أعلاه، دالة len() Python ينفذ تعدد الأشكال لأنواع بيانات السلسلة والقائمة والقاموس، على التوالي.

تعدد الأشكال والميراث

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

هناك نوعان من المفاتيح Python مفاهيم تسمى تجاوز الطريقة والتحميل الزائد للطريقة.

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

دعونا نأخذ المثال التالي للتعدد الأشكال والوراثة كما هو موضح أدناه: -

Python Code:

class baseclass:
    def __init__(self, name):
    self.name = name
def area1(self):
    pass
def __str__(self):
    return self.name
class rectangle(baseclass):
    def __init__(self, length, breadth):
    super().__init__("rectangle")
self.length = length
self.breadth = breadth
def area1(self):
    return self.length * self.breadth
class triangle(baseclass):
    def __init__(self, height, base):
    super().__init__("triangle")
self.height = height
self.base = base
def area1(self):
    return (self.base * self.height) / 2
a = rectangle(90, 80)
b = triangle(77, 64)
print("The shape is: ", b)
print("The area of shape is", b.area1())
print("The shape is:", a)
print("The area of shape is", a.area1())

الإخراج:

The shape is: a triangle
The area of a shape is 2464.0

The shape is: a rectangle
The area of a shape is 7200

في الكود أعلاه، الطرق لها نفس الاسم المحدد كطريقة init وطريقة Area1. يتم بعد ذلك استخدام كائنات الفئة المربعة والمستطيلة لاستدعاء الطريقتين لأداء مهام مختلفة وتوفير مخرجات مساحة المربع والمستطيل.

تعدد الأشكال مع الأساليب الطبقية

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

In Python، يمكن تعريف فئتين مختلفتين. يمكن أن تكون إحداهما فئة فرعية، وتستمد السمات من فئة محددة أخرى تسمى الفئة الأصل.

يوضح المثال التالي مفهوم تعدد الأشكال باستخدام طرق الفئة: -

Python Code:

class amazon:
    def __init__(self, name, price):
    self.name = name
self.price = price
def info(self):
    print("This is product and am class is invoked. The name is {self.name}. This costs {self.price} rupees.")
class flipkart:
    def __init__(self, name, price):
    self.name = name
self.price = price
def info(self):
    print(f "This is product and fli class is invoked. The name is {self.name}. This costs {self.price} rupees.")
FLP = flipkart("Iphone", 2.5)
AMZ = amazon("Iphone", 4)
for product1 in (FLP, AMZ):
    product1.info()

الإخراج:

This is a product, and fli class is invoked. The name is iPhone, and this costs 2.5 rupees.
This is a product, and am class is invoked. The name is iPhone, and this costs 4 rupees.

في الكود أعلاه، تستخدم فئتان مختلفتان باسم flipkart وamazon نفس أسماء الطرق info وinit لتوفير عروض أسعار خاصة بالمنتج وتوضيح مفهوم تعدد الأشكال بشكل أكبر Python.

الفرق بين التحميل الزائد للطريقة وتعدد الأشكال في وقت الترجمة

في تعدد الأشكال في وقت الترجمة، يقوم مترجم Python يقوم البرنامج بحل المكالمة. يتم تحقيق تعدد الأشكال في وقت الترجمة من خلال التحميل الزائد للطريقة.

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

الأسئلة الشائعة

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

ليس بالطريقة التقليدية. عندما تشترك طريقتان في نفس الاسم، يُعتمد التعريف الأخير. Python بدلاً من ذلك، تحاكي التحميل الزائد باستخدام الوسائط الافتراضية، أو الوسائط *args ذات الطول المتغير، أو مزخرف functools.singledispatch للتعامل مع أنواع الوسائط المختلفة داخل دالة واحدة.

ABStracتُعرّف الفئات الأساسية، من وحدة abc، طرقًا يجب على كل فئة فرعية تنفيذها. وهي تفرض واجهة مشتركة، بحيث يمكن استخدام الفئات الفرعية غير المرتبطة بشكل متعدد الأشكال. Python يضمن كل منها توفير الطرق المطلوبة.

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

نعم. من خلال داك تايping، يمكن استخدام الفئات غير المرتبطة التي تنفذ نفس الطريقة بشكل متبادل دون أي فئة أصلية مشتركة. Operaتوفر خاصية التحميل الزائد لـ tor والوظائف المدمجة مثل len() أيضًا تعدد الأشكال بدون وراثة.

يظهر تعدد الأشكال عندما تقوم دالة واحدة بمعالجة السلاسل أو القوائم أو الكائنات المخصصة، وفي برامج تشغيل قواعد البيانات التي تعرض واجهة برمجة تطبيقات واحدة عبر المحركات، وفي مجموعات أدوات واجهة المستخدم الرسومية حيث تشترك العديد من الأدوات في طرق draw() أو update() التي يتم استدعاؤها من خلال واجهة واحدة.

تعتمد أطر الذكاء الاصطناعي على تعدد الأشكال. في لغة بايثونTorch، كل نموذج يرث من nn.Module ويتجاوز forward(); في scikit-learn، تشترك المقدرات في طرق fit() و predict()، لذلك تعمل الخوارزميات المختلفة من خلال واجهة واحدة متسقة وقابلة للتبديل.

نعم. يقوم GitHub Copilot ومساعدو الذكاء الاصطناعي بإنشاء وظائف من نوع Duck Type، واقتراح حلول افتراضية.tract الفئات الأساسية، وإعادة هيكلة الطرق المتكررة إلى تصميمات متعددة الأشكال من خلال موجه قصير. Revراجع المخرجات للتأكد من صحة المنطق والواجهات.

تلخيص هذه التدوينة بـ: