## الوراثة (Inheritance)
تسمح للـ Class بأن ترث خصائص وأساليب Class أخرى.
### المصطلحات: - **Parent/Base Class**: الفئة الأصل - **Child/Derived Class**: الفئة المشتقة - **super()**: للوصول إلى دوال الأصل
### الفائدة: - إعادة الاستخدام: لا تكرار الكود - التوسع: إضافة أو تعديل السلوك - التنظيم: علاقات "is-a" واضحة
### أنواع الوراثة: - **Single**: من أب واحد - **Multiple**: من آباء متعددين - **Multilevel**: سلسلة وراثة
| 1 | # Parent Class |
| 2 | class Animal: |
| 3 | def __init__(self, name, age): |
| 4 | self.name = name |
| 5 | self.age = age |
| 6 | |
| 7 | def breathe(self): |
| 8 | return f"{self.name} يتنفس" |
| 9 | |
| 10 | def __str__(self): |
| 11 | return f"{self.name} ({self.age} سنوات)" |
| 12 | |
| 13 | # Child Class |
| 14 | class Dog(Animal): |
| 15 | def __init__(self, name, age, breed): |
| 16 | super().__init__(name, age) # استدعاء أب |
| 17 | self.breed = breed |
| 18 | |
| 19 | def bark(self): |
| 20 | return f"{self.name} يقول: هاو!" |
| 21 | |
| 22 | dog = Dog("ريكس", 3, "لابرادور") |
| 23 | print(dog) # يرث __str__ |
| 24 | print(dog.breathe()) # يرث breathe |
| 25 | print(dog.bark()) # خاص به |
مثال 1: وراثة متعددة المستويات
| 1 | class Shape: |
| 2 | def area(self): |
| 3 | return 0 |
| 4 | |
| 5 | class Rectangle(Shape): |
| 6 | def __init__(self, width, height): |
| 7 | self.width = width |
| 8 | self.height = height |
| 9 | |
| 10 | def area(self): |
| 11 | return self.width * self.height |
| 12 | |
| 13 | class Square(Rectangle): |
| 14 | def __init__(self, side): |
| 15 | super().__init__(side, side) # مربع: عرضه = ارتفاعه |
| 16 | |
| 17 | shapes = [Rectangle(4, 6), Square(5)] |
| 18 | for shape in shapes: |
| 19 | print(f"{type(shape).__name__}: المساحة = {shape.area()}") |