آموزش پایتون

مدیریت فایل

پلی مورفیسم در پایتون

کلمه “polymorphism” به معنای “شکل های متعدد” است و در برنامه نویسی به متدها / توابع / عملگرهایی با نام مشابه گفته می شود که می توانند روی بسیاری از اشیاء یا کلاس ها اجرا شوند.

پلی مورفیسم در تابع

یک مثال از یک تابع پایتون که می تواند روی اشیاء مختلف استفاده شود، تابع len() است.

رشته (string)

برای رشته ها len() تعداد کاراکترها را برمی گرداند:

مثال

				
					x = "Hello World!"

print(len(x))
				
			

تاپل

برای تاپل‌ها len() تعداد آیتم های تاپل را برمی گرداند:

مثال

				
					mytuple = ("apple", "banana", "cherry")

print(len(mytuple))
				
			

دیکشنری

برای دیکشنری ها، len() تعداد جفت های داده (کلید/مقدار) را در دیکشنری برمی گرداند:

مثال

				
					thisdict = {
  "brand": "Ford",
  "model": "Mustang",
  "year": 1964
}

print(len(thisdict))
				
			

پلی مورفیسم در کلاس‌ها

Polymorphism اغلب در متدهای Class استفاده می شود، جایی که می توانیم چندین کلاس با نام متد یکسان داشته باشیم. به عنوان مثال، فرض کنید ما سه کلاس داریم: Car، Boat و Plane، و همه آنها متدی به نام 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() را لغو (بازنویسی) می‌کنند.

به دلیل پولی مورفیسم می توانیم برای همه کلاس ها یک متد را اجرا کنیم.

آموزش پایتون

مدیریت فایل