بازگشت به دوره

آموزش رایگان صفر تا صد پایتون (Python) به زبان ساده

0% تکمیل‌شده
0/0 مرحله
  1. معرفی پایتون
  2. شروع کار با پایتون
  3. دستور زبان پایتون (Python Syntax)
  4. توضیح کامنت‌ها در پایتون
  5. متغیرها در پایتون
  6. نام‌های متغیر در پایتون
  7. معرفی متغیرها در پایتون و اختصاص چندین مقدار به آن‌ها
  8. معرفی متغیرها در خروجی با استفاده از پایتون
  9. متغیرهای سراسری (Global Variables) در پایتون
  10. انواع داده‌ها در پایتون
  11. انواع اعداد در پایتون
  12. تبدیل نوع داده در پایتون (Python Casting)
  13. رشته‌ها در پایتون (Python Strings)
  14. برش دادن رشته‌ها در پایتون (Python - Slicing Strings)
  15. تغییر رشته‌ها در پایتون
  16. ترکیب رشته‌ها در پایتون (String Concatenation)
  17. آشنایی با فرمت‌بندی رشته‌ها در پایتون
  18. کاراکترهای Escape در پایتون
  19. مقدمه‌ای بر بولی‌ها (Booleans) در پایتون
  20. عملگرها در پایتون
  21. لیست‌ها در پایتون
  22. دسترسی به آیتم‌های لیست در پایتون
  23. تغییر مقدار آیتم‌های لیست در پایتون
  24. افزودن آیتم به لیست در پایتون
  25. حذف آیتم‌ها از لیست در پایتون
  26. حلقه زدن در لیست‌ها در پایتون
  27. معرفی List Comprehension در پایتون
  28. مرتب‌سازی لیست‌ها در پایتون
  29. کپی کردن لیست‌ها در پایتون
  30. اتصال (Join) لیست‌ها در پایتون
  31. آشنایی با Tuple در پایتون
  32. دسترسی به آیتم‌های یک Tuple در پایتون
  33. بروزرسانی Tuple در پایتون
  34. باز کردن (Unpacking) Tuple در پایتون
  35. حلقه‌ها در Tupleها در پایتون
  36. آموزش ترکیب و تکرار تاپل‌ها در پایتون (Join Tuples)
  37. مجموعه‌ها (Set) در پایتون
  38. دسترسی به آیتم‌های مجموعه (Set) در پایتون
  39. افزودن آیتم به Set در پایتون
  40. حذف آیتم‌ها از Set در Python
  41. حلقه در مجموعه‌ها (Set) در پایتون
  42. روش‌های ترکیب مجموعه‌ها در پایتون (Join Sets)
  43. دیکشنری‌ها در پایتون
  44. دسترسی به آیتم‌های دیکشنری در پایتون
  45. تغییر مقادیر دیکشنری در پایتون
  46. اضافه کردن آیتم‌ها به دیکشنری در پایتون
  47. حذف آیتم‌ها از دیکشنری در پایتون
  48. استفاده از حلقه‌ها در دیکشنری‌ها در پایتون
  49. کپی کردن دیکشنری در پایتون
  50. دیکشنری‌های تو در تو در پایتون (Nested Dictionaries)
  51. شرط‌ها و دستور If در پایتون
  52. حلقه‌های while در پایتون
  53. حلقه‌های for در پایتون
  54. توابع در پایتون
  55. معرفی فانکشن‌های لامبدا در پایتون
  56. آرایه‌ها (Arrays) در پایتون
  57. کلاس‌ها و اشیا در پایتون
  58. وراثت (Inheritance) در پایتون
  59. ایتریتور (یکی یکی پیش رفتن) در پایتون
  60. چندریختی (Polymorphism) در پایتون
  61. محدوده (Scope) در پایتون
  62. ماژول در پایتون چیست؟
  63. کار با تاریخ در پایتون
  64. ریاضیات در پایتون
  65. JSON در پایتون به زبان ساده
  66. عبارات منظم (RegEx) در پایتون
  67. Python PIP
  68. معرفی Try-Except در پایتون
  69. ورودی کاربر در پایتون
  70. فرمت‌بندی رشته‌ها در پایتون

کلمه 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! 🐱" را چاپ کنند). 🎯