پلیمورفیسم در پایتون
پلیمورفیسم یکی از مفاهیم اصلی در برنامهنویسی شیءگرا است که به ما این امکان را میدهد که از یک کد مشترک برای چندین نوع مختلف شی استفاده کنیم. به عبارتی دیگر، با استفاده از پلیمورفیسم، میتوانیم توابع و متدهایی ایجاد کنیم که میتوانند با انواع مختلف دادهها کار کنند. این مفهوم در پایتون به شکلی ساده و زیبا پیادهسازی شده و به برنامهنویسان این امکان را میدهد که انعطافپذیری بیشتری در کدهای خود داشته باشند.
به زبان ساده، پلیمورفیسم به ما این اجازه را میدهد که با استفاده از یک روش مشترک، کارهای مختلفی انجام دهیم. مثلاً فرض کنید دو کلاس مختلف داریم؛ یکی برای حیوانات و دیگری برای وسایل نقلیه. با استفاده از پلیمورفیسم، میتوانیم یک تابع ایجاد کنیم که هم روی حیوانات و هم روی وسایل نقلیه کار کند، بیآنکه نیاز باشد تابعهای جداگانهای برای هر دسته بنویسیم.
یکی از کاربردهای شگفتانگیز پلیمورفیسم این است که میتوانیم از متدهایی استفاده کنیم که ورودی آنها میتواند از انواع مختلفی باشد. این به ما کمک میکند تا کدهای تمیزتری بنویسیم و توانایی نگهداری از آنها را بالا ببریم. مثلاً فکر کنید که نیاز دارید با اشیاء مختلفی ارتباط برقرار کنید، تنها کافی است از یک تابع واحد استفاده کنید که میتواند با آنها تعامل داشته باشد.
در تصویر کلان، پلیمورفیسم به ما کمک میکند تا طراحیهایی بسازیم که نه تنها بهراحتی قابل درک هستند بلکه قابلیت توسعه و نگهداری نیز دارند. در ادامه، یک مثال عملی از پلیمورفیسم در پایتون را بررسی خواهیم کرد تا به صورت ملموستر از این مفهوم بهرهبرداری کنیم.
class Animal:
def sound(self):
pass
class Dog(Animal):
def sound(self):
return "Woof!"
class Cat(Animal):
def sound(self):
return "Meow!"
def animal_sound(animal):
print(animal.sound())
my_dog = Dog()
my_cat = Cat()
animal_sound(my_dog) # خروجی: Woof!
animal_sound(my_cat) # خروجی: Meow!
توضیحات کد
در ابتدا یک کلاس پایه به نام Animal
تعریف میکنیم که متد sound
را به صورت خالی قرار میدهیم. این کلاس به عنوان یک الگو برای دیگر کلاسها عمل میکند.
سپس دو کلاس Dog
و Cat
را تعریف میکنیم که هر یک از آنها کلاس Animal
را ارثبری میکنند و متد sound
را به طور خاص برای خود پیادهسازی میکنند.
در مرحله بعد، یک تابع animal_sound
تعریف میکنیم که ورودی آن یک شیء از نوع Animal
است و با استفاده از متد sound
صدا را چاپ میکند.
در نهایت، ما دو شیء از کلاسهای Dog
و Cat
ایجاد میکنیم و با استفاده از تابع animal_sound
، صداهای مخصوص هر کدام را به نمایش میگذاریم. نتیجه این خواهد بود که با یک تابع واحد، قادر به نمایش صدای حیوانات مختلف هستیم.