آموزش چند ریختی در پایتون
کلمهی چند ریختی در پایتون، به معنی شکلهای زیاد است، و در برنامه نویسی، به متدها، تابعها یا عملگرهایی گفته میشود که نام یکسانی دارند و میتوانند در آبجکتها یا کلاسهای بسیاری مورد استفاده قرار گیرند.
چند ریختی در تابعها
اگر بخواهیم در پایتون، تابعی را مثال بزنیم که بتواند در آبجکتهای مختلف مورد استفاده قرار گیرد، میتوانیم تابع len() را معرفی کنیم.
استفاده از تابع len() در رشتهها(String)
تابع len() برای رشتهها، تعداد کاراکترهای آن را برمیگرداند:
استفاده از تابع len() در تاپلها
تابع len() برای تاپلها، تعداد آیتمهای درون آن را برمیگرداند:
استفاده از تابع len() در دیکشنری
تابع len() برای دیکشنریها، تعداد جفتهای کلید/مقدار(key/value) در آن را برمیگرداند:
مثال شماره 13
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
print(len(thisdict))
نتیجه:
3
امتحان کنیدچند ریختی در کلاسهای پایتون
اغلب از چند ریختی، در متدهای کلاس(Class methods) استفاده میشود، به طوری که میتوانیم چندین کلاس داشته باشیم که نام متد یکسانی داشته باشند. بعنوان مثال، فرض کنید سه کلاس به نامهای Car و Boat و Plane داشته باشیم که همهی آنها، یک متد به نام move() داشته باشند:
مثال شماره 14
کلاسهای مختلف که متدهای یکسانی دارند:
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 object
boat1 = Boat("Ibiza", "Touring 20") #Create a Boat object
plane1 = Plane("Boeing", "747") #Create a Plane object
for x in (car1, boat1, plane1):
x.move()
نتیجه:
Drive!
Sail!
Fly!
امتحان کنیددر مثال بالا، به حلقهی for در انتهای کدها توجه کنید. به خاطر چند ریختی، ما میتوانیم متد مشابهی را برای هر سه کلاس، مورد استفاده قرار دهیم.
وراثت در چند ریختیِ کلاس
سوال: با کلاسها، و کلاسهای فرزندی که نام مشابهی دارند باید چه کار کنیم؟ آیا میتوانیم در آنها از چند ریختی استفاده کنیم؟
پاسخ: بله. اگر از مثال بالا استفاده کنیم و یک کلاس والد به نام Vehicle ایجاد کنیم، و کلاسهای Car و Boat و Plane را بعنوان کلاسهای فرزند، از کلاس Vehicle قرار دهیم، این کلاسهای فرزند، متدهای Vehicle را به ارث میبرند، اما میتوانند آنها را نادیده بگیرند(لغو کنند؛ override).
مثال شماره 15
ایجاد یک کلاس به نام 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()
نتیجه:
Ford
Mustang
Move!
Ibiza
Touring 20
Sail!
Boeing
747
Fly!
امتحان کنیدکلاسهای فرزند، متدها و پروپرتیها را از کلاس والد به ارث میبرند.
در مثال بالا، میتوانیم ببینیم که کلاس Car خالی است اما از کلاس Vehicle، پروپرتیهای brand و model و متد move() را به ارث میبَرَد.
کلاسهای Boat و Plane نیز پروپرتیهای brand و model و متد move() را از کلاس Vehicle به ارث میبرند اما هردوی آنها، متد move() را نادیده میگیرند(لغو یا override میکنند).
با استفاده از چند ریختی در پایتون، میتوانیم از یک متد مشابه، برای تمام کلاسها استفاده کنیم.
منبع: www.w3schools.com/python
- بازدید: 41
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.