تعرفنا على الصفوف (class) سابقاً — كائن يخدماته وصفاته. الوراثة تاخذ الفكرة لبعدها: صف جديد يرث كل شي من صف أب، ويضيف عليه أو يعدله:
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
return "..."
class Dog(Animal): # الصف ابن Animal
def speak(self): # تجاوز — تعديل سلوك الأب
return "هو باارك!"
class Cat(Animal):
def __init__(self, name, indoor):
super().__init__(name) # نداء أب: يجهز الاسم
self.indoor = indoor
rex = Dog("ريكس")
milu = Cat("ميشو", True)
print(rex.speak()) # هو باارك!
print(milu.speak()) # ...
print(milu.indoor) # Trueالقواعد الذهبية:
1. الصف الابن ياخذ كل صفات الأب وأفعاله مجاناً.
2. التجاوز (override): تعريف نفس الدالة بالابن يستبدل نسخة الأب.
3. super() نداء على الأب من داخل الابن — نستخدمها في __init__ لما نبقي تجهيز الأب ونضيف عليه.
ليش الوراثة؟ بدل ما تعيد كتابة «الاسم + الوصف» بكل صف، تكتبها مرة بالأب — والتعديل عليها ينتشر لكل العائلة.