در پایتون، وراثت (Inheritance) به شما امکان میدهد کلاسی جدید بسازید که قابلیتها و ویژگیهای یک کلاس والد (Parent/Base Class) را به ارث ببرد.
این کار باعث کد کمتر، سازماندهی بهتر و قابلیت گسترش بالاتر میشود.
🔹 ساختار پایه
class Parent:
# ویژگیها و متدهای والد
pass
class Child(Parent):
# ویژگیها و متدهای فرزند
pass
کلاس
Child
تمام ویژگیها و متدهایParent
را به ارث میبرد.
🔹 مثال ساده
class Animal:
def speak(self):
print("یک حیوان صدا میکند")
class Dog(Animal): # Dog فرزند Animal
pass
d = Dog()
d.speak() # خروجی: یک حیوان صدا میکند
🔹 افزودن یا بازنویسی متدها
کلاس فرزند میتواند متد جدید اضافه کند یا متد والد را override کند.
class Dog(Animal):
def speak(self): # override
print("سگ پارس میکند")
def wag_tail(self):
print("دم تکان میدهد")
d = Dog()
d.speak() # سگ پارس میکند
d.wag_tail() # دم تکان میدهد
🔹 سازنده در وراثت
اگر کلاس فرزند سازندهٔ خودش داشته باشد، میتواند سازندهٔ والد را هم فراخوانی کند:
class Person:
def __init__(self, name):
self.name = name
class Student(Person):
def __init__(self, name, major):
super().__init__(name) # فراخوانی سازنده والد
self.major = major
s = Student("Ali", "Computer")
print(s.name, s.major) # Ali Computer
-
()super
برای دسترسی به متدهای کلاس والد استفاده میشود.
🔹 چند سطح وراثت (Multilevel Inheritance)
class A:
pass
class B(A):
pass
class C(B):
pass
کلاس
C
ویژگیهایB
وA
را هم دارد.
🔹 وراثت چندگانه (Multiple Inheritance)
class Base1:
def m1(self):
print("متد Base1")
class Base2:
def m2(self):
print("متد Base2")
class Child(Base1, Base2):
pass
c = Child()
c.m1() # از Base1
c.m2() # از Base2
-
اگر نام متد در چند والد تکرار شود، ترتیب جستجو بر اساس MRO (Method Resolution Order) است.
🔹 بررسی نوع و رابطه
print(isinstance(s, Student)) # True
print(issubclass(Student, Person)) # True
✅ نکات مهم
-
اگر در کلاس فرزند متدی همنام متد والد تعریف کنید، متد فرزند اجرا میشود.
-
()super
همیشه به کلاس والد مستقیم ارجاع دارد و با MRO کار میکند. -
وراثت بیرویه ممکن است کد را پیچیده کند؛ ترکیب (Composition) گاهی بهتر است.
💡 تمرینهای پیشنهادی
-
کلاس
Vehicle
بسازید و کلاسهایCar
وBike
از آن ارثبری کنند؛ هر کدام متد مخصوص خود داشته باشند. -
سلسلهمراتبی با سه سطح (مثلاً موجود زنده → حیوان → پرنده) ایجاد کنید و متدهای مختلف اضافه کنید.
-
برنامهای بنویس که با استفاده از چند وراثت (
Multiple Inheritance
) قابلیتهای دو کلاس والد را به کلاس فرزند منتقل کند.
✅ خلاصه
-
وراثت = استفادهٔ مجدد از کد و گسترش آسان.
-
()super
برای فراخوانی متد یا سازندهٔ کلاس والد استفاده میشود. -
پایتون از چند وراثت پشتیبانی میکند و ترتیب جستجوی متدها با MRO مدیریت میشود.