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


چندریختی در زبان برنامه نویسی پایتون
براي خريد اين درس نياز است وارد سايت شويد. در صورت نداشتن حساب کاربري عضو شويد.

چندریختی در پایتون

در این درس از آموزش پایتون و در ادامه دروس گذشته، به مبحث چنددریختی در پایتون، که مرتبط با مبحث شی گرایی در این زبان برنامه نویسی است، می پردازیم. ابتدا با تعریف چندریختی در پایتون شروع می کنیم تا با مفهوم آن بیشتر آشنا شویم.

چندریختی (polymorphism) چیست؟

واژه چندریختی در پایتون به معنای داشتن اشکال متعدد است. در برنامه نویسی، چندریختی به معنای استفاده از نام یکسان تابع برای انواع مختلف است.
در ادامه مثالی از توابع چندریختی داخلی را خواهید دید:

# Python program to demonstrate in-built poly-
# morphic functions 
# len() being used for a string
print(len("geeks"))
 
# len() being used for a list
print(len([10, 20, 30]))

خروجی قطعه کد بالا به ترتیب اعداد5 و 3 می باشد.

چندریختی و کلاس ها

در این قسمت چندریختی را با یک مثال توضیح می دهیم تا مبحث را عمیق تر یاد بگیرید. به قطعه کد زیر توجه کنید؛ این کد به ما نشان می دهد که چگونه پایتون می تواند از دو نوع کلاس مختلف به یک شکل استفاده کند. در اینجا، ما یک حلقه for ایجاد کرده ایم که این حلقه از طریق چند شی تکرار می شود.
سپس متد ها را بدون اینکه نگران نوع کلاس هر شی باشیم، فراخوانی می کنیم. فرض بر این است که این متد ها در واقع در هر کلاس وجود دارند.

class India():
    def capital(self):
        print("New Delhi is the capital of India.")
 
    def language(self):
        print("Hindi is the most widely spoken language of India.")
 
    def type(self):
        print("India is a developing country.")
 
class USA():
    def capital(self):
        print("Washington, D.C. is the capital of USA.")
 
    def language(self):
        print("English is the primary language of USA.")
 
    def type(self):
        print("USA is a developed country.")
 
obj_ind = India()
obj_usa = USA()
for country in (obj_ind, obj_usa):
    country.capital()
    country.language()
    country.type()

خروجی قطعه کد بالا به صورت زیر می باشد:

New Delhi is the capital of India.
Hindi is the most widely spoken language of India.
India is a developing country.
Washington, D.C. is the capital of USA.
English is the primary language of USA.
USA is a developed country.

چندریختی و وراثت

در زبان برنامه نویسی پایتون، چندریختی این اجازه را به ما می دهد تا متد هایی را که در کلاس فرزند تعریف می کنیم، نامی مشابه با کلاس والد داشته باشند. در وراثت، کلاس فرزند متد ها را از کلاس والد به ارث می برد. با این حال ممکن است متدی را در کلاس فرزند که از کلاس والد به ارث برده است، تغییر دهد.
چندریختی در مواردی مفید است که روش به ارث رسیده از کلاس والد کاملا با کلاس فرزند مطابقت نداشته باشد.
در چنین مواردی، متد را دوباره در کلاس فرزند پیاده سازی می کنیم. این فرآیند پیاده سازی مجدد یک متد در کلاس فرزند، به نام Method Overriding شناخته می شود.
در ادامه با ذکر یک قطعه کد، این مبحث را عملا نشان می دهیم:

class Bird:
  def intro(self):
    print("There are many types of birds.")
     
  def flight(self):
    print("Most of the birds can fly but some cannot.")
   
class sparrow(Bird):
  def flight(self):
    print("Sparrows can fly.")
     
class ostrich(Bird):
  def flight(self):
    print("Ostriches cannot fly.")
     
obj_bird = Bird()
obj_spr = sparrow()
obj_ost = ostrich()
 
obj_bird.intro()
obj_bird.flight()
 
obj_spr.intro()
obj_spr.flight()
 
obj_ost.intro()
obj_ost.flight()

خروجی این قطعه کد به شرح زیر می باشد:

There are many types of birds.
Most of the birds can fly but some cannot.
There are many types of birds.
Sparrows can fly.
There are many types of birds.
Ostriches cannot fly.

چندریختی با یک تابع و اشیاء

با استفاده از این ویژگی در پایتون می توان تابعی ایجاد کرد که بتواند هر شیئی را گرفته و امکان چند ریختی را فراهم کند. در ادامه با ذکر مثال به طور کامل توضیح خواهیم داد.
در این مثال تابعی به نام "()func " را ایجاد می کنیم. این تابع یک شی را می گیرد که نام آن "obj" است. اگر چه ما از نام "obj" استفاده می کنیم، اما هر شی نمونه سازی شده می تواند به این تابع فراخوانی شود.
در مرحله بعد، به تابع این اجازه را می دهیم که کاری را انجام دهد که در آن از شی "obj" ارسالی استفاده کند.
در این مرحله سه متد ()language() ،capital و ()type فراخوانی می کنیم که هر کدام در دو کلاس «India» و «USA» تعریف شده اند.
در مرحله بعد نمونه هایی از این دو کلاس را ایجاد می کنیم. این نمونه ها باید جدید باشند و قبلا از آن ها نداشته باشیم. حال می توانیم عمل آن ها را با استفاده از تابع ()func یکسان فراخوانی کنیم.

def func(obj):
    obj.capital()
    obj.language()
    obj.type()
  
obj_ind = India()
obj_usa = USA()
  
func(obj_ind)
func(obj_usa)

قطعه کد زیر، پیاده سازی چند ریختی با یک تابع را نشان می دهد:

class India():
    def capital(self):
        print("New Delhi is the capital of India.")
  
    def language(self):
        print("Hindi is the most widely spoken language of India.")
  
    def type(self):
        print("India is a developing country.")
  
class USA():
    def capital(self):
        print("Washington, D.C. is the capital of USA.")
  
    def language(self):
        print("English is the primary language of USA.")
  
    def type(self):
        print("USA is a developed country.")
 
def func(obj):
    obj.capital()
    obj.language()
    obj.type()
  
obj_ind = India()
obj_usa = USA()
  
func(obj_ind)
func(obj_usa)

خروجی این قطعه کد به شرح زیر می باشد:

New Delhi is the capital of India.
Hindi is the most widely spoken language of India.
India is a developing country.
Washington, D.C. is the capital of USA.
English is the primary language of USA.
USA is a developed country.

در این درس مبحث چند ریختی در پایتون را به طور کامل و با مثال توضیح دادیم. امیدواریم این درس برای شما مفید بوده باشد. اگر از این درس استفاده کردید حتما نظرات و سوالاتتان را با ما به اشتراک بگذارید. همچنین اگر مبحث چند ریختی در پایتون را پسندیدید، آن را با دوستانتان به اشتراک بگذارید تا آن ها نیز از این درس استفاده کنند.
در جلسه بعدی از آموزش پایتون مقدماتی درسمن به مبحث جذاب کلاس های Enum می پردازیم و این مبحث را نیز به طور کامل آموزش می دهیم.

 


نظر بدهید نظر شما در تصمیم دیگران اثرگذار است. لطفا برای ما و همراهان درسمن نظر خود را بنویسید.
برای ارسال نظر نیاز است وارد سایت شوید. در صورت نداشتن حساب کاربری عضو شوید.


مشخصات دوره


مدرس دوره : مهدی عباسی
تعداد جلسات : جلسه
مدت زمان : 892 دقیقه
حجم دوره : 2/60 گیگابایت
سطح مهارت : مقدماتی تا متوسط
وضعیت دوره : پایان یافته
تعداد دانشجویان : 8877
: میانگین امتیاز
برای دسترسی به این دوره وارد یا عضو شوید.
مهدی عباسی

مهدی عباسی هستم، مسلط به حداقل ۲۰ زبان مطرح برنامه نویسی به صورت پیشرفته، مدیر عامل شرکت آریا نرم افزار و بنیانگذار آکادمی درسمن، مسلط به تدریس دروس تخصصی کاردانی و کارشناسی کامپیوتر، پایگاه داده ها، برنامه نویسی پیشرفته، مبانی برنامه نویسی، مباحث ویژه طراحی وب و ....