کلمه “polymorphism” به معنای “شکل های متعدد” است و در برنامه نویسی به متدها / توابع / عملگرهایی با نام مشابه گفته می شود که می توانند روی بسیاری از اشیاء یا کلاس ها اجرا شوند.
پلی مورفیسم در تابع
len()
است. رشته (string)
len()
تعداد کاراکترها را برمی گرداند: تاپل
len()
تعداد آیتم های تاپل را برمی گرداند: دیکشنری
len()
تعداد جفت های داده (کلید/مقدار) را در دیکشنری برمی گرداند: مثال
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
print(len(thisdict))
پلی مورفیسم در کلاسها
move()
دارند: مثال
کلاس های مختلف با یک متد:
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") #Create a Car class
boat1 = Boat("Ibiza", "Touring 20") #Create a Boat class
plane1 = Plane("Boeing", "747") #Create a Plane class
for x in (car1, boat1, plane1):
x.move()
در پایان به حلقه for نگاه کنید. به دلیل پلی مورفیسم می توانیم برای هر سه کلاس یک متد را اجرا کنیم.
پلی مورفیسم در کلاس ارثی
در مورد کلاس هایی با کلاس های فرزند با نام مشابه چطور؟ آیا می توانیم از پلی مورفیسم در آنجا استفاده کنیم؟
بله. اگر از مثال بالا استفاده کنیم و یک کلاس والد به نام Vehicle بسازیم و کلاس های فرزند Car, Boat, Plane از Vehicle را بسازیم، کلاس های فرزند متدهای Vehicle را به ارث می برند، اما می توانند آنها را بازنویسی کنند:
مثال
کلاسی به نام Vehicle ایجاد کنید و کلاس های فرزند Car, Boat, Plane را از Vehicle بسازید:
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") #Create a Car object
boat1 = Boat("Ibiza", "Touring 20") #Create a Boat object
plane1 = Plane("Boeing", "747") #Create a Plane object
for x in (car1, boat1, plane1):
print(x.brand)
print(x.model)
x.move()
کلاسهای فرزند خصوصیات و متدها را از کلاس والد به ارث می برند.
در مثال بالا می بینید که کلاس Car
خالی است، اما brand
، model
و move()
را از Vehicle
به ارث می برد.
کلاسهای Boat
و Plane
نیز brand
، model
و move()
را از Vehicle
به ارث میبرند، اما هر دو متد move()
را لغو (بازنویسی) میکنند.
به دلیل پولی مورفیسم می توانیم برای همه کلاس ها یک متد را اجرا کنیم.