Python Inheritance

در پایتون، وراثت (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) گاهی بهتر است.

💡 تمرین‌های پیشنهادی

  1. کلاس Vehicle بسازید و کلاس‌های Car و Bike از آن ارث‌بری کنند؛ هر کدام متد مخصوص خود داشته باشند.

  2. سلسله‌مراتبی با سه سطح (مثلاً موجود زنده → حیوان → پرنده) ایجاد کنید و متدهای مختلف اضافه کنید.

  3. برنامه‌ای بنویس که با استفاده از چند وراثت (Multiple Inheritance) قابلیت‌های دو کلاس والد را به کلاس فرزند منتقل کند.

✅ خلاصه

  • وراثت = استفادهٔ مجدد از کد و گسترش آسان.

  • ()super برای فراخوانی متد یا سازندهٔ کلاس والد استفاده می‌شود.

  • پایتون از چند وراثت پشتیبانی می‌کند و ترتیب جستجوی متدها با MRO مدیریت می‌شود.