چند ریختی چیست؟

همانطور که از نامش پیداست به معنی داشتن چند شکل است.

با استفاده از این کاربرد از مبحث شئ گرایی میتوانید با ایجاد یک تابع در همه ی کلاس ها از آن استفاده کنید.

برخی توابع وجود دارد که در ماژول های داخلی پایتون هستند و میتوان همیشه آنهارا فراخوانی و استفاده کرد.

تابع len()

این تابع یک نمونه از چندریختی ها است.

در این تابع میتوانید طول یک رشته ، لیست ، تاپل و... را برگردانید.

x = "Alireza"

print(len(x))

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

در صورتی که چند کلاس داشته باشیم و بخواهیم برای آنها تابعی در نظر بگیریم میتوانیم مانند نمونه کد زیر عمل کنیم.

class Device:
  def __init__(self, brand, score):
    self.brand = brand
    self.score = score

  def small(self):
    print("small!")

class phone(Device):
  pass

class laptop(Device):
  def small(self):
    print("medium!")

class PC(Device):
  def small(self):
    print("big!")

phone1 = phone("apple", "89")
laptop1 = laptop("lenovo", "78")
PC1 = PC("samsung", "88") 

for x in (phone1, laptop1, PC1):
  x.small()
  • در نمونه کد بالا ما سه کلاس تعریف کردیم.
  • برای هر کلاس یک تابع با نام یکسان ایجاد کردیم. (این تابع همان چند ریختی است)
  • سپس کلاس هارا با نام آن تابع صدا بزنیم مقادیری که در تابع ایجاد کردیم بر اساس نام آن کلاس برمیگردد.

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

اگر یک کلاس فرزند ایجاد کنیم همه ی مقادیر کلاس والد را میگیرد حتی آن تابع های چند ریختی ولی میتوان آنهارا نادیده گرفت.

class Device:
  def __init__(self, brand, score):
    self.brand = brand
    self.score = score

  def small(self):
    print("small!")

class phone(Device):
  pass

class laptop(Device):
  def small(self):
    print("medium!")

class PC(Device):
  def small(self):
    print("big!")

phone1 = phone("apple", "89")
laptop1 = laptop("lenovo", "78")
PC1 = PC("samsung", "88") 

for x in (phone1, laptop1, PC1):
  print(x.brand)
  print(x.score)
  x.small()

خلاصه درس

  • چندشکلی ها تابع هایی یکسان برای کلاس ها هستند.
  • میتوان یک تابع را برای چندین کلاس ایجاد کرد و دستوراتی در آن نوشت.
  • اگر کلاس فرزندی بسازیم ، تابع های چندریختی را میگیرد ولی میتواند آنهارا نادیده بگیرد.

توسعه دهندگان
علیرضا چمنی