چندریختی (Polymorphism) در پایتون

چندریختی (Polymorphism) در پایتون
چندریختی (Polymorphism) در پایتون یکی از مفاهیم بنیادی برنامهنویسی شیءگرا (OOP) در برنامه نویسی پایتون است که به شما امکان میدهد اشیاء از انواع مختلف را به طور یکسان رفتار دهید. این کار با پیادهسازی متدها با نام یکسان در کلاسهای مختلف، اما با پیادهسازیهای متفاوت، انجام میشود.
چندریختی به شما کمک میکند تا کد خود را انعطافپذیرتر، قابل استفاده مجددتر و نگهداری آسانتر کنید.
در این مقاله راهنمای جامع، به بررسی کامل چندریختی در پایتون، از جمله نحو، انواع چندریختی، پیادهسازی چندریختی، و نکات مهم، میپردازیم.
1. انواع چندریختی
دو نوع اصلی چندریختی در پایتون وجود دارد:
- چندریختی زیرمجموعهای (Subtyping Polymorphism): این نوع چندریختی به شما امکان میدهد از کلاسهای مشتق شده برای جایگزینی کلاسهای پایه در هر موقعیتی که از کلاس پایه انتظار میرود، استفاده کنید.
- چندریختی فراخوانی مجازی (Virtual Method Calls): این نوع چندریختی به شما امکان میدهد متدها را با نام یکسان در کلاسهای مختلف پیادهسازی کنید، به طوری که هنگام فراخوانی متد، پیادهسازی مناسب بسته به نوع شیء فراخوانی شده انتخاب میشود.
2. پیادهسازی چندریختی
برای پیادهسازی چندریختی در پایتون، از وراثت و فراخوانی مجازی استفاده میکنیم.
وراثت:
- از وراثت برای ایجاد سلسله مراتب کلاس و به اشتراک گذاشتن کد بین کلاسهای مختلف استفاده میکنیم.
- کلاسهای مشتق شده میتوانند ویژگیها و متدهای کلاس پایه را به ارث ببرند.
فراخوانی مجازی:
- هنگامی که یک متد با نام یکسان در کلاسهای مختلف پیادهسازی میشود، از فراخوانی مجازی برای انتخاب پیادهسازی مناسب استفاده میشود.
- پیادهسازی مناسب بسته به نوع شیء فراخوانی شده انتخاب میشود.
3. مثال
در مثال زیر، از چندریختی برای نمایش اطلاعات مربوط به افراد، دانشآموزان و کارمندان استفاده میکنیم.
class Person:
"""کلاس Person برای نمایش اطلاعات افراد"""
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"سلام، من {self.name} هستم و {self.age} سال سن دارم.")
class Student(Person):
"""کلاس Student برای نمایش اطلاعات دانشآموزان"""
def __init__(self, name, age, major):
super().__init__(name, age)
self.major = major
def study(self):
print(f"{self.name} در حال مطالعه رشته {self.major} است.")
class Employee(Person):
"""کلاس Employee برای نمایش اطلاعات کارمندان"""
def __init__(self, name, age, company):
super().__init__(name, age)
self.company = company
def work(self):
print(f"{self.name} در حال کار در شرکت {self.company} است.")
person1 = Person("علی", 30)
student1 = Student("سارا", 25, "علوم کامپیوتر")
employee1 = Employee("محمد", 40, "دیجیکالا")
person1.greet() # سلام، من علی هستم و 30 سال سن دارم.
student1.greet() # سلام، من سارا هستم و 25 سال سن دارم.
employee1.greet() # سلام، من محمد هستم و 40 سال سن دارم.
student1.study() # سارا در حال مطالعه رشته علوم کامپیوتر است.
employee1.work() # محمد در حال کار در شرکت دیجیکالا است.
در این مثال:
- کلاس
Personکلاس پایه برای نمایش اطلاعات مربوط به افراد است. - کلاس
Studentکلاس مشتق شده از کلاسPersonبرای نمایش اطلاعات مربوط به دانشآموزان است. - کلاس
Employeeکلاس مشتق شده از کلاسPersonبرای نمایش اطلاعات مربوط به کارمندان است. - متد
greet()در هر سه کلاس پیادهسازی شده است، اما پیادهسازی هر کدام متفاوت است. - از فراخوانی مجازی برای انتخاب پیاده سازی مناسب متد greet() برای شیء استفاده می شود.
4. نکات مهم:
- از چندریختی برای ایجاد کد انعطافپذیرتر، قابل استفاده مجددتر و نگهداری آسانتر استفاده کنید.
- از چندریختی برای پیادهسازی رابطها (interfaces) و انتزاع (abstraction) در برنامه خود استفاده کنید.
- از چندریختی برای ایجاد برنامههای شئگرایانه (OOP) قویتر و کارآمدتر استفاده کنید.
- مراقب پیچیدگیهای ناشی از استفاده بیش از حد از چندریختی باشید.
5. منابع مفید:
- آموزش چندریختی در پایتون:جامعترین آموزش برنامه نویسی پایتون در ایران
در این مقاله، سعی کردیم به بررسی کامل چندریختی در پایتون، از جمله نحو، انواع چندریختی، پیادهسازی چندریختی، و نکات مهم، بپردازیم. با استفاده از چندریختی میتوانید کد خود را به طور قابل توجهی بهبود ببخشید و برنامههای قدرتمندتر و کارآمدتر بسازید.