چندریختی (Polymorphism) در برنامهنویسی شیگرا
چندریختی به معنی قابلیت یک شی یا تابع برای رفتارهای متفاوت بسته به نوع یا کلاس آن است. در واقع، چندریختی اجازه میدهد که یک رابط واحد بتواند با اشیاء مختلف از کلاسهای مختلف کار کند و هر کدام رفتار مخصوص به خودشان را ارائه دهند.
کاربردهای چندریختی
چندریختی باعث میشود کدهای ما انعطافپذیرتر و قابل توسعهتر باشند و از نوشتن کدهای تکراری جلوگیری کند. میتوان با استفاده از چندریختی، توابع و متدهایی نوشت که با انواع مختلفی از اشیاء کار کنند بدون اینکه نیاز باشد برای هر نوع، کد جداگانه بنویسیم.
انواع چندریختی در پایتون
- چندریختی از طریق ارثبری (Subtype Polymorphism): کلاسهای فرزند متدهای کلاس والد را بازتعریف (Override) میکنند و در زمان اجرا رفتار متفاوتی دارند.
- چندریختی از طریق duck typing: در پایتون، اگر شیئی متدی با نام مشخص داشته باشد، مهم نیست از چه کلاسی است، میتوان آن را به عنوان آن نوع در نظر گرفت.
مثال از چندریختی با ارثبری
class Animal:
def speak(self):
print("Animal makes a sound")
class Dog(Animal):
def speak(self):
print("Woof!")
class Cat(Animal):
def speak(self):
print("Meow!")
def animal_sound(animal: Animal):
animal.speak()
dog = Dog()
cat = Cat()
animal_sound(dog) # خروجی: Woof!
animal_sound(cat) # خروجی: Meow!
مثال از چندریختی با duck typing
class Bird:
def fly(self):
print("Bird is flying")
class Airplane:
def fly(self):
print("Airplane is flying")
def let_it_fly(flying_thing):
flying_thing.fly()
bird = Bird()
plane = Airplane()
let_it_fly(bird) # خروجی: Bird is flying
let_it_fly(plane) # خروجی: Airplane is flying
خلاصه
چندریختی امکان استفاده از یک رابط مشترک برای اشیاء مختلف را فراهم میکند. این ویژگی باعث میشود کدها قابل نگهداریتر، قابل توسعهتر و خواناتر شوند و انعطافپذیری بیشتری در طراحی نرمافزار داشته باشیم.