
روز ۳۲ آموزش پایتون: چندریختی (Polymorphism) و متدهای ویژه
در دنیای برنامه نویسی شیءگرا، چندریختی یا Polymorphism یکی از اصول مهم و کلیدی است که امکان استفاده از یک رابط مشترک برای کلاسهای متفاوت را فراهم میکند. با چندریختی، میتوان متدها را در کلاسهای مختلف با رفتارهای متفاوت پیادهسازی کرد و در عین حال از یک نام مشترک برای فراخوانی آنها استفاده کرد. این مفهوم باعث میشود برنامهها انعطافپذیر، قابل توسعه و قابل نگهداری باشند. علاوه بر این، پایتون امکانات ویژهای برای تعریف متدهای خاص به نام متدهای ویژه مثل __init__ و __str__ ارائه میدهد که عملکرد کلاسها را سادهتر، خواناتر و حرفهایتر میکند. یادگیری این مفاهیم باعث میشود بتوانیم برنامههای شیءگرای واقعی و پروژههای پیچیده را به شکل منظم و ساختاریافته بنویسیم.
مفهوم چندریختی در پایتون
چندریختی یعنی اینکه یک متد میتواند در کلاسهای مختلف رفتار متفاوتی داشته باشد و هنگام فراخوانی، رفتار مناسب کلاس مربوطه اجرا شود. این قابلیت باعث میشود کدها از نظر ساختاری منعطف و قابل توسعه باشند و نیاز به نوشتن متدهای مشابه با نامهای متفاوت از بین برود. چندریختی همچنین باعث میشود بتوانیم مجموعهای از اشیاء با کلاسهای متفاوت را در یک لیست قرار داده و متد مشترک آنها را بدون نگرانی از نوع شیء فراخوانی کنیم. این ویژگی در طراحی برنامههای بزرگ و سیستمهای چند سطحی بسیار کاربرد دارد.
نمونه کد چندریختی:
class Animal:
def make_sound(self):
print("صدای عمومی")
class Dog(Animal):
def make_sound(self):
print("سگ پارس کرد!")
class Cat(Animal):
def make_sound(self):
print("گربه میو کرد!")
animals = [Dog(), Cat(), Animal()]
for animal in animals:
animal.make_sound()در این مثال، هر کلاس متد make_sound را به شکل متفاوتی تعریف کرده است. وقتی از حلقه برای فراخوانی این متد استفاده میکنیم، رفتار مناسب هر کلاس اجرا میشود بدون آنکه نیاز به بررسی نوع شیء داشته باشیم. این همان اصل چندریختی است که برنامه را ساده و انعطافپذیر میکند.
متد ویژه __init__ برای مقداردهی اولیه
متد __init__ یکی از مهمترین متدهای ویژه در پایتون است که به عنوان سازنده کلاس عمل میکند و هنگام ایجاد شیء، ویژگیهای اولیه آن را مقداردهی میکند. این متد باعث میشود ایجاد اشیاء با ویژگیهای شخصیسازی شده ساده و استاندارد باشد. استفاده از __init__ پایه اصلی طراحی کلاسهای قابل استفاده مجدد است و به ما امکان میدهد کلاسها را انعطافپذیر طراحی کنیم.
نمونه کد متد __init__:
class User:
def __init__(self, name, age):
self.name = name
self.age = age
user1 = User("Ali", 25)
print(user1.name, user1.age)متد ویژه __str__ برای نمایش قابل خواندن
متد __str__ یکی دیگر از متدهای ویژه است که هنگام چاپ شیء با print() اجرا میشود و نمایشی خوانا از شیء ارائه میدهد. بدون این متد، پایتون تنها آدرس حافظه شیء را نمایش میدهد که برای انسان قابل فهم نیست. تعریف __str__ باعث میشود خروجی برنامه حرفهایتر و قابل درکتر باشد و به خصوص هنگام دیباگ کردن برنامهها بسیار مفید است.
نمونه کد متد __str__:
class User:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"User(name={self.name}, age={self.age})"
user1 = User("Ali", 25)
print(user1)خروجی کد بالا به شکل User(name=Ali, age=25) است که بسیار خواناتر و قابل فهمتر از آدرس حافظه شیء است.
جمعبندی کاربرد چندریختی و متدهای ویژه
در این درس یاد گرفتیم که چندریختی به ما امکان میدهد یک متد مشترک را در کلاسهای مختلف با رفتار متفاوت اجرا کنیم و برنامه را منعطف و قابل توسعه بسازیم. همچنین با متدهای ویژه __init__ و __str__ آشنا شدیم که ایجاد اشیاء و نمایش آنها را ساده و حرفهای میکنند. تمرین پیشنهادی این است که چند کلاس مختلف بسازید، متدهای مشترک را در هر کلاس با رفتار متفاوت پیادهسازی کنید و برای هر کلاس متدهای ویژه تعریف کنید تا تسلط کامل روی Polymorphism و متدهای ویژه پیدا کنید. این مهارتها پایه اصلی برنامهنویسی شیءگرا و پروژههای حرفهای پایتون هستند و در طراحی سیستمهای واقعی کاربرد فراوان دارند.
