الوراثة الأساسية
جزء من قسم Object Oriented Programming في رحلة Python على Coddy — الدرس 17 من 64.
تسمح الوراثة للفئة بوراثة السمات والأساليب من فئة أخرى، مما ينشئ علاقة أب-ابن.
إليك مثال على فئة أب (parent class):
class Animal:
def __init__(self, name):
self.name = name
def info(self):
print(f"I am {self.name}, an animal")أنشئ فئة فرعية ترث من الفئة الأب:
class Dog(Animal):
pass # ترث كل شيء من Animalالصيغة class Dog(Animal): تعني أن Dog يرث من Animal. ضع اسم الفئة الأب بين قوسين.
أنشئ كائنات من كلا الفئتين:
generic_animal = Animal("Creature")
buddy = Dog("Buddy")استخدم الأساليب الموروثة:
generic_animal.info()
buddy.info()المخرجات:
I am Creature, an animal
I am Buddy, an animalعلى الرغم من أن Dog لا يعرّف __init__ أو info، إلا أنه يحصل عليهما تلقائياً من Animal.
يمكنك إضافة دوال (methods) جديدة إلى الفئة الفرعية:
class Dog(Animal):
def bark(self):
print(f"{self.name} says Woof!")
buddy = Dog("Buddy")
buddy.info() # دالة موروثة
buddy.bark() # دالة جديدةالناتج:
I am Buddy, an animal
Buddy says Woof!نقطة رئيسية: ترث الفئات الفرعية جميع السمات والأساليب من فئتها الأصلية. استخدم صيغة class Child(Parent): لإنشاء الوراثة. يساعدك هذا في إعادة استخدام الكود وإنشاء تسلسلات هرمية منطقية للفئات.
التحدي
متوسطvehicle.py: يحتوي على فئةVehicleالأساسيةcar.py: يحتوي على فئةCarالتي ترث منVehicledriver.py: الملف الرئيسي لاختبار تنفيذك
يحتوي كل ملف على تعليقات TODO مفصلة لإرشادك خلال التنفيذ. ستحتاج إلى:
- إكمال فئة
Vehicleبسماتmakeوmodel - تنفيذ وراثة الفئات بشكل صحيح في فئة
Car - إعداد بيانات الاستيراد (import) الصحيحة بين الملفات
- إنشاء واختبار الكائنات في ملف driver
اتبع تعليقات TODO بعناية لأنها توفر إرشادات خطوة بخطوة للحل.
ورقة مرجعية
يسمح التوريث (Inheritance) للفئة بوراثة السمات والأساليب من فئة أخرى باستخدام بناء الجملة class Child(Parent)::
class Animal:
def __init__(self, name):
self.name = name
def info(self):
print(f"I am {self.name}, an animal")
class Dog(Animal):
pass # يرث كل شيء من Animalترث الفئات التابعة (Child classes) تلقائيًا جميع أساليب وسمات الفئة الأصل (parent):
buddy = Dog("Buddy")
buddy.info() # يستخدم الأسلوب الموروث
# Output: I am Buddy, an animalأضف أساليب جديدة إلى الفئات التابعة مع الحفاظ على الوظائف الموروثة:
class Dog(Animal):
def bark(self):
print(f"{self.name} says Woof!")
buddy = Dog("Buddy")
buddy.info() # أسلوب موروث
buddy.bark() # أسلوب جديدجرّب بنفسك
# TODO: استيراد فئة Vehicle من vehicle.py
# TODO: استيراد فئة Car من car.py
# TODO: إنشاء كائن Vehicle بماركة "Toyota" وطراز "Corolla"
vehicle = None
# TODO: إنشاء كائن Car بماركة "Honda" وطراز "Civic"
car = None
# TODO: استدعاء التابع display_info() على كائن vehicle
# المخرجات المتوقعة: "Vehicle: Toyota Corolla"
# TODO: استدعاء التابع display_info() على كائن car
# المخرجات المتوقعة: "Vehicle: Honda Civic"
# ملاحظة: Car ترث display_info من Vehicle دون تعديليتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Object Oriented Programming
1أساسيات OOP
الملفات الخارجيةمقدمة في OOPClasses مقابل Objectsمعامل selfMethodsAttributesدالة البناء (__init__)مراجعة - آلة حاسبة بسيطة4الوراثة
الوراثة الأساسيةدالة ()superإعادة تعريف الدوال (Method Overriding)الوراثة المتعددةترتيب استدعاء الدوال (Method Resolution Order)مراجعة - هيكلية الموظفين5تعدد الأشكال
مراجعة إعادة تعريف الدوالمفهوم Duck Typingالأصناف والدوال المجردةتصميم الواجهاتملخص - حاسبة الأشكال