چندریختی (Polymorphism)
چندریختی یا Polymorphism به معنی «چند شکل بودن» است. در برنامه نویسی، این مفهوم به متدها، توابع یا عملگرهایی اشاره دارد که می توانند با نام یکسان روی اشیا یا کلاس های متفاوت اجرا شوند.
چندریختی در توابع
یک نمونه ساده تابع len()
در پایتون است که می تواند روی رشته، لیست، تاپل یا دیکشنری اعمال شود و نتیجه ای متناسب بازگرداند:
x = "Hello World!"
print(len(x)) # خروجی: 12
mytuple = ("apple", "banana", "cherry")
print(len(mytuple)) # خروجی: 3
thisdict = {"brand": "Ford", "model": "Mustang", "year": 1964}
print(len(thisdict)) # خروجی: 3
چندریختی در کلاس ها
در متدهای کلاس نیز می توان چندریختی داشت. مثلاً سه کلاس Car
، Boat
و Plane
همگی متدی به نام move()
دارند، اما هرکدام عملکرد متفاوتی ارائه می دهند:
class Car:
def move(self):
print("Drive!")
class Boat:
def move(self):
print("Sail!")
class Plane:
def move(self):
print("Fly!")
for x in (Car(), Boat(), Plane()):
x.move()
به کمک چندریختی می توان یک متد با نام مشابه را روی اشیا مختلف فراخوانی کرد.
چندریختی در وراثت
زمانی که کلاس های فرزند از یک کلاس والد ارث بری می کنند، می توانند متدهای والد را بازنویسی کنند و چندریختی ایجاد شود:
class Vehicle:
def move(self):
print("Move!")
class Car(Vehicle):
pass
class Boat(Vehicle):
def move(self):
print("Sail!")
class Plane(Vehicle):
def move(self):
print("Fly!")
for x in (Car(), Boat(), Plane()):
x.move()
همان طور که می بینید، کلاس Car
بدون متد خاصی تعریف شده ولی همچنان متد والد را به ارث برده است. در حالی که Boat
و Plane
متد move()
را بازنویسی کرده اند.
ادامه یادگیری
برای یادگیری بیشتر به بخش تکرارکننده ها در پایتون بروید یا فصل محدوده متغیرها (Scope) را مطالعه کنید.