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