چندریختی در زبان پایتون چیست ؟

1

چندریختی در زبان پایتون چیست ؟ 

کیانا ابراهیمی سوال پاسخ داده شده اکتبر 15, 2020
گذاشتن نظر
0

چندریختی در زبان پایتون چیست ؟ 

اغلب متدهایی که تا بهحال نوشتهایم تنها براي یک نوع مخصوص کار میکنند. وقتی کـه یـک شیء جدید میسازید، متدهایی مینویسید که روي آن نوع عمل میکنند. اما عملیات مشخصی وجود دارد که شما میخواهید بـر روي بسـیاري از انـواع انجـام دهیـد؛ از قبیل عملیات ریاضی که در بخش قبل دیدید. اگر انواع متعددي، یـک مجموعـه از عملیـات یکسـان را پشتیبانی کنند شما میتوانید توابعی بنویسید که بر روي هر کدام از آن انواع کار کنند. براي نمونه عملیات multadd) که در جبر خطی رایج است) سه پارامتر دریافت میکند، اولی را در دومی ضرب کرده سپس با سومی جمع میکند. مـا مـیتـوانیم آن را در پـایتون بـه ایـن صـورت بنویسیم:

def multadd (x, y, z):
return x * y + z

این متد براي هر مقدار x و y که بتوانند در هم ضرب شوند و براي هر مقـدار z کـه بتوانـد بـا حاصلضرب جمع شود کار خواهد کرد. ما میتوانیم آن را با مقادیر عددي احضار کنیم:

>> multadd (3, 2, 1)
7

یا با Pointها:

>> p1 = Point(3, 4)
>>> p2 = Point(5, 7)
>>> print multadd (2, p1, p2)
(11, 15)
>>> print multadd (p1, p2, 1)
44

در اولین مورد Point در یک عدد ضرب میشود و سپس با یک Point دیگر جمع میشـود و در دومین مورد حاصلضرب نقطهاي یک مقدار عددي را نتیجه میدهد، بنابراین پارامتر سوم هم باید یک مقدار عددي باشد. تابعی شبیه به این، که میتواند پارامترهایی با انواع مختلف را دریافت کند، چندریختی نامیده میشود. عنوان مثالی دیگر، متد frontAndBack را ملاحظه کنید که یک لیست را از اول به آخـر و معکوس چاپ میکند:

def frontAndBack(front):
import copy
back = copy.copy(front)
back.reverse()
print str(front) + str(back)

از آنجا که متد reverse یک تغییردهنده است، ما قبل از معکوس کردن لیست یـک copy از آن میسازیم. با این روش، متد لیستی را که به عنوان پارامتر وارد شده تغییر نمیدهد. در اینجا مثالی که frontAndBack را روي یک لیست بهکار میبرد ملاحظه میکنید:

>>> myList = [1, 2, 3, 4]
>>> frontAndBack(myList)
[1, 2, 3, 4][4, 3, 2, 1]

البته ما سعی کردیم این تابع را براي لیستها بهکار ببریم، لذا اگر ایـن متـد کـار کنـد موجـب شگفتی نیست. آنچه که ممکن است باعث تعجب شود آن است که ما بتوانیم متد را براي یک Point بهکار بریم. براي نعیین اینکه آیا یک تابع میتواند براي یک نوع جدید بهکار رود یا نه، ما از قوانین بنیـادي چندریختیها استفاده میکنیم: اگر همۀ عملیات درون یک تابع بتواند براي یک نوع بهکار رود تابع میتوانـد بـر روي آن نوع به کار گرفته شود. عملیات داخل متد شامل copy ،reverse و print هستند. copy بر روي هر شیء کار مـیکنـد و قـبلاً متـد __str __را هـم بـراي همـۀ Pointهـا نوشتهایم. حال تمام آنچه ما نیاز داریم نوشتن متد reverse در کلاس Point است:

def reverse(self):self.x , self.y = self.y, self.x

آنگاه میتوانیم Pointها را به frontAndBack بفرستیم:

>> p = Point(3, 4)
>>> frontAndBack(p)
(3, 4)(4, 3)

بهترین نوع چند شکلی نوع غیرعمدي اسـت؛ در جـائیکـه شـما درمـییابیـد تـابعی کـه قـبلاً نوشته اید میتواند براي نوعی که اصلاً طراحی نکردهاید هم بهکار رود.

برای اموزش های ویدیویی زبان پایتون به بستر ویدیو های اموزشی بروید

بستر اموزش های ویدویی 

کیانا ابراهیمی سوال پاسخ داده شده اکتبر 15, 2020
گذاشتن نظر
شما در حال مشاهده 1 از 1 پاسخ هستید ، برای دیدن همه پاسخها اینجا را کلیک کنید .
پاسخ خود را بنویسید .
  • فعال
  • بازدیدها1822 times
  • پاسخ ها1 پاسخ
ورود به متاورس | متاورس ایرانی
ورود به متاورس ایران یا همان متاورس ملی

علامت ذره بین Tutorials سمت راست به رنگ قرمز به شما کمک خواهد کرد .

جدید ترین سوالات پرسیده شده

منقضی شدن سم بتانال 1 پاسخ | 0 آرا
ایا ایدز گزفتم؟ 0 پاسخ ها | 0 آرا
انتخاب ورزش رزمی 0 پاسخ ها | 1 رای
وزارت تعاون کار و رفاه اجتماعی نماد اعتماد الکترونیک اسناد و املاک کشور مرکز آموزش ویدیویی انجمن حم فروشگاه ملی تولید کنندگان مدیریت بر مدیران حم سامانه حیوانات رسانه ملی اخبار متا دانشگاه متاورس استخدام | دانش فروشگاه حم تبلیغات ملی بازار NFT متاورس رنگ نقشه ملی سه بعدی متا املاک و مستغلات