جلسه ۵۸: Polymorphism به کمک نوشتار Duck در پایتون

در این درس شما Polymorphism
را به کمک نوشتار duck
پیادهسازی خواهید کرد. نوشتار duck
یکی از پرکاربردترین مفاهیم موجود در برنامه نویسی شیگرا زبان پایتون است. به استفاده از این مفهوم میتوانیم Polymorphism
را بدون وراثت پیادهسازی کنیم. اسم آن ممکن است برای شما جالب به نظر بیاید و در انتهای این درس آن را یاد خواهید گرفت.
نوشتار Duck
چیست؟
میگوییم اگر شیای مانند اردک(Duck) شنا کند، مانند اردک غذا بخورد یا به طور خلاصه مانند اردک رفتار کند، آن شی یک اردک است.
نوشتار پویا
نوشتار Duck
در پایتون، بر اساس مفاهیم نوشتار پویا بدست آمده است. (نوشتار پویا به این معناست که میتوانیم، نوع یک شی را بعدا در کدها تغییر دهیم) با توجه به ماهیت پویای پایتون، نوشتار Duck
این امکان را به کاربر میدهد تا از هر شیای که رفتار مورد نظر را فراهم کند، بدون محدودیت اینکه باید زیر کلاس باشد استفاده کنیم. کد زیر را برای اینکه نوشتار پویا را بیشتر یادبگیرید بررسی کنید:
x = 5 # type of x is an integer
print(type(x))
x = "Educative" # type of x is now string
print(type(x))
پیاده سازی نوشتاز Duck
مثالی را برای پیادهسازی این مورد ببینید:
class Dog:
def Speak(self):
print("Woof woof")
class Cat:
def Speak(self):
print("Meow meow")
class AnimalSound:
def Sound(self, animal):
animal.Speak()
sound = AnimalSound()
dog = Dog()
cat = Cat()
sound.Sound(dog)
sound.Sound(cat)
توضبحات
- در خط ۱۳ نوع
animal
در بخش تعریف متدSound
مشخص نشده است. - نوع
Animal
زمانی مشخص میشود که، متد فراخوانی شود. بنابراین مهم نیست که کدام نوع شی را شما به عنوان پارامتر متدSound
میدهید. جیزی که مهم است متدsound
میتواند در همه کلاس هایی که به عنوان ورودی به آن داده میشود تعریف بشود. - میتوانیم هر خصوصیت یا متدی از
animal
که در کلاسAnimalSound
داشته باشد را استفاده کنیم.
نتیجهگیری
حال به این موضوع برمیگردیم که چرا میگوییم نوشتار Duck
. اگر یک پرنده مانند یک اردک صحبت کند، مانند یک اردک شنا کند و مانند یک اردک غذا بخورد. آن پرنده اردک است. متشابها در مثال بالا، برای شی animal
اهمیتی ندارد که تعریف متد sound
چه باشد، به شرطی که رفتار مرتبط داشته باشد. از منظر عموم مردم از آنجایی که سگ و گربه، میتوانند مانند حیوانات صحبت کنند، هر دو حیوان هستند. اینگونه است که ما به polymorphism
بدون وراثت دستپیدا کردیم. در درس بعدی، موضوع بحث ما استفاده از کلاسهای پایه انتزاعی در پایتون است.