چند شکلی چیست؟
همانطور که از نامش پیداست به معنی داشتن چند شکل است.
با استفاده از این کاربرد از مبحث شئ گرایی میتوانید با ایجاد یک تابع در همه ی کلاس ها از آن استفاده کنید.
برخی توابع وجود دارد که در ماژول های داخلی پایتون هستند و میتوان همیشه آنهارا فراخوانی و استفاده کرد.
به عبارت دیگر,کلمه "چندشکلی" به معنای "شکلهای متعدد" است
و در برنامهنویسی به متدها/توابع/عملگرها که با همان نام که میتوانند روی اشیاء یا کلاسهای مختلف اجرا شوند، اشاره می کند.
تابع 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()
خلاصه درس
- چندشکلی ها تابع هایی یکسان برای کلاس ها هستند.
- میتوان یک تابع را برای چندین کلاس ایجاد کرد و دستوراتی در آن نوشت.
- اگر کلاس فرزندی بسازیم ، تابع های چند شکلی را میگیرد ولی میتواند آنها را نادیده بگیرد.