ما هو الصنف المجرّد؟
صنف لا يُنشأ منه كائن مباشرة، يُستخدم كقالب للأصناف المشتقّة. قد يحوي طرقًا مجرّدة (بلا تنفيذ) وأخرى منفّذة.
from abc import ABC, abstractmethod
class Shape(ABC):
def __init__(self, name):
self.name = name
def describe(self): # طريقة منفّذة (مشتركة)
return f"{self.name}: مساحة {self.area()}"
@abstractmethod
def area(self): # طريقة مجرّدة (يجب تنفيذها)
pass
class Square(Shape):
def __init__(self, side):
super().__init__("مربّع")
self.side = side
def area(self):
return self.side ** 2
# Shape("x") ← خطأ: لا يمكن إنشاء صنف مجرّد
s = Square(4)
print(s.describe()) # مربّع: مساحة 16
الفائدة
- يفرض على الأبناء تنفيذ طرق معيّنة.
- يشارك كودًا مشتركًا (بخلاف الواجهة النقيّة).
متى تختار؟
- تشارك كودًا وحالة بين الأبناء → صنف مجرّد.
- عقد سلوك فقط، أو تحتاج تعدّد عقود → واجهة.
🎯 التالي: التركيب (Composition).