آموزش رایگان صفر تا صد پایتون (Python) به زبان ساده
-
معرفی پایتون
-
شروع کار با پایتون
-
دستور زبان پایتون (Python Syntax)
-
توضیح کامنتها در پایتون
-
متغیرها در پایتون
-
نامهای متغیر در پایتون
-
معرفی متغیرها در پایتون و اختصاص چندین مقدار به آنها
-
معرفی متغیرها در خروجی با استفاده از پایتون
-
متغیرهای سراسری (Global Variables) در پایتون
-
انواع دادهها در پایتون
-
انواع اعداد در پایتون
-
تبدیل نوع داده در پایتون (Python Casting)
-
رشتهها در پایتون (Python Strings)
-
برش دادن رشتهها در پایتون (Python - Slicing Strings)
-
تغییر رشتهها در پایتون
-
ترکیب رشتهها در پایتون (String Concatenation)
-
آشنایی با فرمتبندی رشتهها در پایتون
-
کاراکترهای Escape در پایتون
-
مقدمهای بر بولیها (Booleans) در پایتون
-
عملگرها در پایتون
-
لیستها در پایتون
-
دسترسی به آیتمهای لیست در پایتون
-
تغییر مقدار آیتمهای لیست در پایتون
-
افزودن آیتم به لیست در پایتون
-
حذف آیتمها از لیست در پایتون
-
حلقه زدن در لیستها در پایتون
-
معرفی List Comprehension در پایتون
-
مرتبسازی لیستها در پایتون
-
کپی کردن لیستها در پایتون
-
اتصال (Join) لیستها در پایتون
-
آشنایی با Tuple در پایتون
-
دسترسی به آیتمهای یک Tuple در پایتون
-
بروزرسانی Tuple در پایتون
-
باز کردن (Unpacking) Tuple در پایتون
-
حلقهها در Tupleها در پایتون
-
آموزش ترکیب و تکرار تاپلها در پایتون (Join Tuples)
-
مجموعهها (Set) در پایتون
-
دسترسی به آیتمهای مجموعه (Set) در پایتون
-
افزودن آیتم به Set در پایتون
-
حذف آیتمها از Set در Python
-
حلقه در مجموعهها (Set) در پایتون
-
روشهای ترکیب مجموعهها در پایتون (Join Sets)
-
دیکشنریها در پایتون
-
دسترسی به آیتمهای دیکشنری در پایتون
-
تغییر مقادیر دیکشنری در پایتون
-
اضافه کردن آیتمها به دیکشنری در پایتون
-
حذف آیتمها از دیکشنری در پایتون
-
استفاده از حلقهها در دیکشنریها در پایتون
-
کپی کردن دیکشنری در پایتون
-
دیکشنریهای تو در تو در پایتون (Nested Dictionaries)
-
شرطها و دستور If در پایتون
-
حلقههای while در پایتون
-
حلقههای for در پایتون
-
توابع در پایتون
-
معرفی فانکشنهای لامبدا در پایتون
-
آرایهها (Arrays) در پایتون
-
کلاسها و اشیا در پایتون
-
وراثت (Inheritance) در پایتون
-
ایتریتور (یکی یکی پیش رفتن) در پایتون
-
چندریختی (Polymorphism) در پایتون
-
محدوده (Scope) در پایتون
-
ماژول در پایتون چیست؟
-
کار با تاریخ در پایتون
-
ریاضیات در پایتون
-
JSON در پایتون به زبان ساده
-
عبارات منظم (RegEx) در پایتون
-
Python PIP
-
معرفی Try-Except در پایتون
-
ورودی کاربر در پایتون
-
فرمتبندی رشتهها در پایتون
چندریختی (Polymorphism) در پایتون
کلمه Polymorphism به معنی چندشکلی است. در برنامهنویسی، یعنی یک متد، تابع یا عملگر میتواند روی انواع مختلفی از دادهها یا کلاسها اجرا شود.
به بیان ساده، یک اسم ثابت، اما رفتارهای مختلف! 😃
مثلاً متد ()len را در نظر بگیرید. این متد میتواند روی رشتهها (String)، لیستها (List)، تاپلها (Tuple) و دیکشنریها (Dictionary) کار کند، اما خروجی آن بسته به نوع داده تغییر میکند.
🔹 چندریختی در توابع (Function Polymorphism)
تابع ()len مثال خوبی برای درک چندریختی است. این تابع تعداد کاراکترها، عناصر یا کلیدها را بسته به نوع دادهای که روی آن اجرا میشود، برمیگرداند.
✅ مثال: تابع ()len روی انواع مختلف داده
1️⃣ روی رشته (String)
📌 خروجی: تعداد کاراکترها
x = "Hello World!"
print(len(x)) # خروجی: 12
2️⃣ روی تاپل (Tuple)
📌 خروجی: تعداد آیتمها
mytuple = ("apple", "banana", "cherry")
print(len(mytuple)) # خروجی: 3
3️⃣ روی دیکشنری (Dictionary)
📌 خروجی: تعداد کلیدها
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
print(len(thisdict)) # خروجی: 3
🔹 میبینید که تابع ()len بسته به نوع داده، نتیجه متفاوتی دارد. این یعنی چندریختی در توابع! 🎯
💡 تمرین: یک لیست (List) بسازید و از تابع ()len برای شمارش آیتمهای آن استفاده کنید.
🔹 چندریختی در کلاسها (Class Polymorphism)
در کلاسها، چندریختی یعنی چندین کلاس میتوانند متدهایی با نام یکسان داشته باشند، اما رفتار متفاوتی اجرا کنند.
✅ مثال: سه کلاس مختلف با متد ()move
📌 در این مثال، سه کلاس Car (ماشین)، Boat (قایق) و Plane (هواپیما) داریم. همهی این کلاسها یک متد مشترک به نام ()move دارند، اما خروجی هرکدام متفاوت است.
class Car:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Drive! ")
class Boat:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Sail! ")
class Plane:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Fly! ")
# ایجاد اشیای مختلف
car1 = Car("Ford", "Mustang")
boat1 = Boat("Ibiza", "Touring 20")
plane1 = Plane("Boeing", "747")
# اجرای متد ()move برای هر کلاس
for vehicle in (car1, boat1, plane1):
vehicle.move()
🔹 خروجی:
Drive!
Sail!
Fly!
🔹 میبینید که یک متد یکسان در کلاسهای مختلف، رفتار متفاوتی دارد! 💡 این همان چندریختی در کلاسها است.
💡 تمرین: کلاس Train (قطار) را با متد ()move اضافه کنید که "Choo Choo! 🚂"
را چاپ کند!
🔹 چندریختی در وراثت (Inheritance Polymorphism)
حال فرض کنید که این کلاسها همگی از یک کلاس مادر (Parent Class) به نام Vehicle
ارثبری کنند. در این صورت، متدهای آنها را میتوان بازنویسی (Override) کرد.
✅ مثال: کلاس مادر Vehicle
و کلاسهای فرزند
📌 در اینجا، Car
متد ()move را از Vehicle
بدون تغییر به ارث برده، اما Boat
و Plane
آن را بازنویسی کردهاند.
class Vehicle:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Move!")
class Car(Vehicle): # ارثبری بدون تغییر متد move
pass
class Boat(Vehicle): # بازنویسی متد move
def move(self):
print("Sail! ")
class Plane(Vehicle): # بازنویسی متد move
def move(self):
print("Fly! ")
# ایجاد اشیای مختلف
car1 = Car("Ford", "Mustang")
boat1 = Boat("Ibiza", "Touring 20")
plane1 = Plane("Boeing", "747")
# نمایش اطلاعات و اجرای متد ()move
for vehicle in (car1, boat1, plane1):
print(f"{vehicle.brand} - {vehicle.model}")
vehicle.move()
📌 خروجی:
Ford - Mustang
Move!
Ibiza - Touring 20
Sail!
Boeing - 747
Fly!
🔹 اینجا Car
همان متد Move!
را از کلاس Vehicle
گرفته، اما Boat
و Plane
متد ()move را بازنویسی کردهاند.
💡 تمرین: کلاس Bicycle
(دوچرخه) را اضافه کنید که "Pedal! 🚴"
را نمایش دهد.
🎯 جمعبندی
✅ چندریختی (Polymorphism) یعنی یک تابع، متد یا عملگر میتواند رفتارهای مختلفی روی دادههای مختلف داشته باشد.
✅ در توابع، مثل len()
, بسته به نوع داده، خروجی متفاوت است.
✅ در کلاسها، کلاسهای مختلف میتوانند متد مشابهی داشته باشند، اما رفتارشان متفاوت باشد.
✅ در وراثت، کلاسهای فرزند میتوانند متدهای کلاس مادر را بازنویسی کنند.
💡 چالش:
یک کلاس Animal
بسازید که متد speak()
داشته باشد. سپس کلاسهای Dog
و Cat
را ایجاد کنید که این متد را بازنویسی کنند (مثلاً "Woof! 🐶"
و "Meow! 🐱"
را چاپ کنند). 🎯