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

آموزش رایگان صفر تا صد پایتون (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. فرمت‌بندی رشته‌ها در پایتون

وراثت (Inheritance) یکی از ویژگی‌های مهم در برنامه‌نویسی شی‌گرا است که به ما اجازه می‌دهد یک کلاس جدید بسازیم که ویژگی‌ها و متدهای یک کلاس دیگر را به ارث ببرد. این کار باعث کاهش کدنویسی تکراری و سازمان‌دهی بهتر کدها می‌شود.


۱️. مفاهیم اولیه وراثت در پایتون

کلاس والد (Parent Class):
کلاسی که ویژگی‌ها و متدهایش به کلاس دیگر منتقل می‌شود. به این کلاس کلاس پایه (Base Class) هم می‌گویند.

کلاس فرزند (Child Class):
کلاسی که ویژگی‌ها و متدهای کلاس دیگر را به ارث می‌برد. به این کلاس کلاس مشتق‌شده (Derived Class) هم گفته می‌شود.

🎯 چرا از وراثت استفاده کنیم؟

🔹 جلوگیری از تکرار کد
🔹 خوانایی و سازمان‌دهی بهتر کدها
🔹 قابلیت استفاده مجدد از کدها


۲️. ایجاد کلاس والد (Parent Class)

هر کلاسی می‌تواند کلاس والد باشد. ساخت کلاس والد مثل ساخت هر کلاس دیگری است.

📌 مثال: ساخت کلاس Person

در این مثال، کلاس Person شامل دو ویژگی firstname و lastname و یک متد ()printname برای چاپ نام فرد است.

class Person:
  def __init__()(self, fname, lname):
    self.firstname = fname
    self.lastname = lname

  def printname()(self):
    print(self.firstname, self.lastname)

# ساخت یک شیء از کلاس Person و اجرای متد printname
x = Person("John", "Doe")
x.printname()

🔹 خروجی:

John Doe

۳️. ایجاد کلاس فرزند (Child Class) 🧑‍🎓

برای ایجاد یک کلاس که از کلاس دیگری ارث‌بری کند، کافی است نام کلاس والد را هنگام تعریف کلاس فرزند درون پرانتز قرار دهیم.

📌 مثال: ساخت کلاس Student که از Person ارث‌بری می‌کند

class Student(Person):
pass

🔹 از pass استفاده کردیم چون هنوز متد یا ویژگی جدیدی اضافه نکرده‌ایم.

اکنون کلاس Student تمام ویژگی‌ها و متدهای Person را دارد.

📌 استفاده از کلاس Student

x = Student("Mike", "Olsen")
x.printname()

🔹 خروجی:

Mike Olsen

۴️⃣ اضافه کردن متد __init__() به کلاس فرزند

تا اینجا، کلاس Student به‌صورت پیش‌فرض متد __init__() را از کلاس والد به ارث برده است. اما اگر بخواهیم یک متد __init__() جدید برای کلاس فرزند تعریف کنیم، دیگر متد __init__() کلاس والد به‌طور خودکار ارث‌بری نمی‌شود و باید آن را به‌صورت دستی اضافه کنیم.

📌 روش اضافه کردن __init__() و حفظ ارث‌بری

class Student(Person):
def __init__()(self, fname, lname):
  Person.__init__()(self, fname, lname)

🔹 در اینجا متد __init__() کلاس Person را صدا زده‌ایم تا همچنان ویژگی‌های firstname و lastname را داشته باشیم.


۵️. استفاده از super() برای ساده‌تر کردن ارث‌بری

در پایتون، می‌توان از super() برای فراخوانی متدهای کلاس والد بدون نیاز به نام آن استفاده کرد.

📌 مثال: استفاده از super() در کلاس فرزند

class Student(Person):
def __init__()(self, fname, lname):
  super().__init__()(fname, lname)

✅ مزیت استفاده از super() این است که اگر در آینده نام کلاس والد تغییر کند، نیازی به تغییر این قسمت از کد نخواهیم داشت.


۶️⃣ اضافه کردن ویژگی‌های جدید به کلاس فرزند

می‌توانیم در کلاس فرزند ویژگی‌های جدیدی تعریف کنیم. مثلا، می‌خواهیم سال فارغ‌التحصیلی (graduationyear) را به کلاس Student اضافه کنیم.

📌 مثال: اضافه کردن ویژگی graduationyear

class Student(Person):
def __init__()(self, fname, lname, year):
  super().__init__()(fname, lname)
  self.graduationyear = year

📌 استفاده از کلاس Student

x = Student("Mike", "Olsen", 2019)
print(x.firstname, x.lastname, x.graduationyear)

🔹 خروجی:

Mike Olsen 2019

۷️. اضافه کردن متدهای جدید به کلاس فرزند

می‌توانیم علاوه بر ویژگی‌های جدید، متدهای جدید هم به کلاس فرزند اضافه کنیم.

📌 مثال: اضافه کردن متد welcome()

class Student(Person):
def __init__()(self, fname, lname, year):
  super().__init__()(fname, lname)
  self.graduationyear = year

def welcome()(self):
  print("Welcome", self.firstname, self.lastname, "to the class of", self.graduationyear)

📌 استفاده از متد welcome()

x = Student("Mike", "Olsen", 2019)
x.welcome()

🔹 خروجی:

Welcome Mike Olsen to the class of 2019

۸️. نادیده گرفتن متدهای کلاس والد (Method Overriding)

اگر متدی با همان نام متد کلاس والد در کلاس فرزند تعریف شود، متد کلاس والد نادیده گرفته می‌شود.

📌 مثال: تغییر متد printname() در کلاس فرزند

class Student(Person):
def __init__()(self, fname, lname, year):
  super().__init__()(fname, lname)
  self.graduationyear = year

def printname()(self):
  print("Student Name:", self.firstname, self.lastname)

📌 استفاده از متد جدید printname()

x = Student("Alice", "Brown", 2022)
x.printname()

🔹 خروجی:

Student Name: Alice Brown

🔹 حالا متد printname() در کلاس Student جایگزین متد printname() کلاس Person شده است.


🎯 تمرین: خودتان امتحان کنید! 🚀

۱️⃣ یک کلاس Animal بسازید که ویژگی species داشته باشد و متد makesound() را تعریف کند.
۲️⃣ کلاس Dog را بسازید که از Animal ارث‌بری کند و متد makesound() را تغییر دهد تا "Woof!" چاپ کند.
۳️⃣ یک شیء از کلاس Dog بسازید و متد makesound() را اجرا کنید.

✍🏻 کد خودتان را بنویسید و تست کنید! 💡


🔚 جمع‌بندی

✅ وراثت به ما کمک می‌کند ویژگی‌ها و متدهای یک کلاس را در کلاس دیگر استفاده کنیم.
✅ کلاس والد (Parent Class) کلاس اصلی است که ویژگی‌ها را به کلاس فرزند (Child Class) می‌دهد.
✅ از super() برای ارث‌بری ساده‌تر متدهای کلاس والد استفاده می‌کنیم.
✅ می‌توانیم ویژگی‌ها و متدهای جدید به کلاس فرزند اضافه کنیم.
✅ با تعریف متدی هم‌نام با متد کلاس والد، می‌توانیم آن را نادیده بگیریم (Override).