## تعدد الأشكال (Polymorphism)
Polymorphism معناه "أشكال متعددة" - القدرة على استخدام نفس الواجهة مع كائنات مختلفة.
### أنواع Polymorphism في Python:
**1. Method Overriding:** الـ Child Class تُعيد تعريف method من الـ Parent ```python class Animal: def speak(self): return "..." class Dog(Animal): def speak(self): return "هاو!" class Cat(Animal): def speak(self): return "مياو!" ```
**2. Duck Typing:** Python لا تهتم بنوع الكائن بل بما يستطيع فعله ```python # أي كائن له دالة area() يمكن استخدامه def print_area(shape): print(shape.area()) ```
| 1 | class Animal: |
| 2 | def __init__(self, name): |
| 3 | self.name = name |
| 4 | |
| 5 | def speak(self): |
| 6 | return "..." |
| 7 | |
| 8 | class Dog(Animal): |
| 9 | def speak(self): |
| 10 | return f"{self.name}: هاو هاو!" |
| 11 | |
| 12 | class Cat(Animal): |
| 13 | def speak(self): |
| 14 | return f"{self.name}: مياو!" |
| 15 | |
| 16 | class Bird(Animal): |
| 17 | def speak(self): |
| 18 | return f"{self.name}: تشيرپ!" |
| 19 | |
| 20 | # Polymorphism في الفعل |
| 21 | animals = [Dog("ريكس"), Cat("ميمي"), Bird("تويتي")] |
| 22 | for animal in animals: |
| 23 | print(animal.speak()) # نفس الاستدعاء، أشكال مختلفة |
مثال 1: Polymorphism مع الأشكال الهندسية
| 1 | import math |
| 2 | |
| 3 | class Shape: |
| 4 | def area(self): return 0 |
| 5 | def name(self): return "شكل" |
| 6 | |
| 7 | class Circle(Shape): |
| 8 | def __init__(self, radius): |
| 9 | self.radius = radius |
| 10 | def area(self): |
| 11 | return math.pi * self.radius ** 2 |
| 12 | def name(self): return "دائرة" |
| 13 | |
| 14 | class Rectangle(Shape): |
| 15 | def __init__(self, w, h): |
| 16 | self.w, self.h = w, h |
| 17 | def area(self): |
| 18 | return self.w * self.h |
| 19 | def name(self): return "مستطيل" |
| 20 | |
| 21 | shapes = [Circle(5), Rectangle(4, 6), Circle(3)] |
| 22 | for s in shapes: |
| 23 | print(f"{s.name()}: المساحة = {s.area():.2f}") |