چندریختی (Polymorphism)
«چندریختی در پایتون» یعنی یک نامِ مشترک، روی شکل های مختلف کار کند. «متد (Method)» همان تابعِ داخل کلاس است. این مفهوم کمک می کند یک کد بنویسیم، اما روی چند نوع شیء اجرا شود؛ مثل یک دکمه مشترک در چند بازی.
چندریختی تابعی با len()
تعریف کوتاه: تابع len() طول شیء را می دهد، اما شکل شیء فرق دارد.
رشته (String)
x = "Hello World!"
print(len(x))
تاپل (Tuple)
mytuple = ("apple", "banana", "cherry")
print(len(mytuple))
دیکشنری (Dictionary)
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
print(len(thisdict))
چندریختی در متدهای کلاس
می توان چند کلاس با یک نامِ متد ساخت. سپس همان نام را روی همه صدا می زنیم.
class Car:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Drive!")
class Boat:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Sail!")
class Plane:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Fly!")
car1 = Car("Ford", "Mustang")
boat1 = Boat("Ibiza", "Touring 20")
plane1 = Plane("Boeing", "747")
for x in (car1, boat1, plane1):
x.move()
چندریختی همراه با وراثت
در ارث بری هم کار می کند. فرزند متد والد را «بازنویسی» می کند.
class Vehicle:
def __init__(self, brand, model):
self.brand = brand
self.model = model
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!")
car1 = Car("Ford", "Mustang")
boat1 = Boat("Ibiza", "Touring 20")
plane1 = Plane("Boeing", "747")
for x in (car1, boat1, plane1):
print(x.brand)
print(x.model)
x.move()
تمرین سه مرحله ای
- کلاس ساده بساز و متد مشترک تعریف کن.
- سه شیء بساز و در یک حلقه صدا بزن.
- یکی را بازنویسی کن و تفاوت خروجی را ببین.
برای مفاهیم مرتبط، صفحه وراثت و همچنین کپسوله سازی را ببین. برای مرور، لینک چندریختی در پایتون را نگه دار.
جمع بندی سریع
- یک نام، روی چند نوع شیء کار می کند.
len()نمونه ساده چندریختی است.- در ارث بری، متدها بازنویسی می شوند.
- حلقه ها قدرت چندریختی را نشان می دهند.
- کد کمتر، انعطاف بیشتر خواهی داشت.