ما هو تعدّد الأشكال؟
"أشكال متعدّدة": نفس الاستدعاء يعطي سلوكًا مختلفًا حسب نوع الكائن الفعلي.
class Animal:
def sound(self):
return "صوت"
class Dog(Animal):
def sound(self):
return "نباح"
class Cat(Animal):
def sound(self):
return "مواء"
# نفس الكود، سلوك مختلف
animals = [Dog(), Cat(), Animal()]
for a in animals:
print(a.sound()) # نباح، مواء، صوت
الفائدة
تكتب كودًا يتعامل مع الأب، فيعمل تلقائيًّا مع كل الأبناء — حتى الجدد:
def describe(animal):
print(animal.sound()) # يعمل مع أي نوع يرث Animal
في اللغات المنمّطة
// Java: قد تحتاج @Override، وأحيانًا virtual في C++
Animal a = new Dog();
a.sound(); // ينفّذ نسخة Dog
أنواع
- تجاوز (Overriding): الابن يعيد تعريف طريقة الأب (هذا الدرس).
- تحميل زائد (Overloading): نفس الاسم بمعاملات مختلفة (درس لاحق).
🎯 التالي: الواجهات (Interfaces).