ما هو التوريث في بايثون؟
التوريث هو مفهوم مهم في البرمجة الكائنية التوجه، ويسمح بإنشاء فئة جديدة بناءً على فئة موجودة بالفعل. في بايثون، يمكن لفئة فرعية أن ترث الخصائص والوظائف من فئة رئيسية، مما يسمح بإعادة استخدام الشفرة وتحسين تنظيمها. يمكن للفئة الفرعية أن تضيف أو تُعدل وظائف الفئة الرئيسية بدون التأثير على الفئة الرئيسية نفسها. يُعتبر التوريث أداة قوية لتقليل التكرار في الشفرة ولتحسين صيانتها.
في بايثون، يتم تعريف التوريث باستخدام بناء الجملة البسيط، حيث يتم تمرير اسم الفئة الرئيسية داخل قوسين عند تعريف الفئة الفرعية. يُمكن للفئة الفرعية الوصول إلى كل من الخصائص والوظائف الخاصة بالفئة الرئيسية، ما لم تكن هذه الخصائص أو الوظائف محمية أو خاصة.
أمثلة على التوريث في بايثون
لننظر في المثال التالي لفهم كيفية عمل التوريث في بايثون. سنقوم بإنشاء فئة رئيسية تُسمى “Vehicle” وفئة فرعية تُسمى “Car”.
class Vehicle:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def display_info(self):
print(f"Brand: {self.brand}, Model: {self.model}")
class Car(Vehicle):
def __init__(self, brand, model, doors):
super().__init__(brand, model)
self.doors = doors
def display_info(self):
super().display_info()
print(f"Doors: {self.doors}")
# إنشاء كائن من الفئة الفرعية Car
car = Car("Toyota", "Corolla", 4)
car.display_info()
في هذا المثال، قمنا بإنشاء الفئة الرئيسية “Vehicle” والتي تحتوي على مُنشئ ووسيلة لعرض المعلومات. الفئة الفرعية “Car” ترث من “Vehicle” وتضيف خاصية جديدة وهي عدد الأبواب. كما تُعيد تعريف وسيلة “display_info” لإضافة معلومات الأبواب أثناء استدعاء الوسيلة.
فوائد التوريث في بايثون
يقدم التوريث العديد من الفوائد في تطوير البرمجيات. أولاً، يُساعد في إعادة استخدام الشفرة، حيث يمكن لفئات متعددة استخدام نفس الشفرة الأساسية من خلال الوراثة من فئة رئيسية واحدة. هذا يُقلل من الحاجة إلى كتابة نفس الشفرة مراراً وتكراراً. ثانياً، يُساهم في تنظيم الشفرة بطريقة منطقية، حيث يمكن تجميع الوظائف المشتركة في فئة رئيسية واحدة ومن ثم تخصيص الفئات الفرعية بخصائص إضافية.
علاوة على ذلك، يُساعد التوريث في تحسين صيانة الشفرة. إذا كانت هناك حاجة لتغيير وظيفة مشتركة، يمكن إجراء التغيير في الفئة الرئيسية وسيتم تطبيقه على جميع الفئات الفرعية التي ترث منها. هذا يقلل من فرص حدوث الأخطاء ويُسهل عملية التحديث والتطوير المستقبلي للبرامج.
