الوراثة في Python
- الصفحة السابقة فئات/أحداث Python
- الصفحة التالية التحور في Python
الوراثة في Python
يُمكن للوراثة أن يُمكننا تعريف فئة تحتوي على جميع الطرق والخصائص للفئة الأخرى.
الفئة الأبهي فئة مستمرة، وتُدعى أيضًا فئة أساسية.
الفرعيةهي فئة مستمدة من فئة أخرى، وتُدعى أيضًا فئة فرعية.
إنشاء فئة آباء
يمكن لأي فئة أن تكون فئة آباء، لذا تكون الجملة مشابهة لإنشاء أي فئة أخرى:
مثال
إنشاء فئة تُدعى Person تحتوي على خصائص firstname وlastname وطرق printname:
class Person: تعريف __init__(self, fname, lname): self.firstname = fname self.lastname = lname def printname(self): print(self.firstname, self.lastname) # استخدم Person لإنشاء عنصر، ثم تنفيذ عملية printname: x = Person("Bill", "Gates") x.printname()
إنشاء الفئة الفرعية
لإنشاء فئة تستمر في توريث وظائف من فئة أخرى، أرسل الفئة الأب كمعامل عند إنشاء الفئة الفرعية:
مثال
إنشاء فئة تُدعى Student ستعتمد على فئة Person للخصائص والأساليب:
class Student(Person): pass
التعليق:إذا لم تكن ترغب في إضافة أي خصائص أو أساليب أخرى إلى هذه الفئة، استخدم pass
الكلمة المفتاحية.
الآن، فئة Student تحتوي على نفس الخصائص والأساليب لفئة Person
مثال
استخدام فئة Student لإنشاء عنصر، ثم تنفيذ عملية printname:
x = Student("Elon", "Musk") x.printname()
إضافة وظيفة __init__()
حتى الآن، قمنا بإنشاء فئة فرعية قد ورثت الخصائص والأساليب من الفئة الأب
نريد أن نضيف __init__()
إضافة الوظيفة إلى الفئة الفرعية (بدلاً من pass
الكلمة المفتاحية).
التعليق:تُدعى وظيفة __init__() تلقائيًا عند استخدام الفئة لإنشاء عنصر جديد
مثال
إضافة وظيفة __init__() لفئة Student
class Student(Person): تعريف __init__(self, fname, lname): # إضافة الخاصية إلخ
عند إضافة وظيفة __init__، لا يورث الفئة الفرعية وظيفة __init__ للفئة الأب
التعليق:وظيفة __init__() للفئة الفرعية تغطي توريث وظيفة __init__() للفئة الأب
إذا كنت تريد الحفاظ على توريث وظيفة __init__() للفئة الأب، فأضف الاتصال بـ __init__() للفئة الأب
مثال
class Student(Person): تعريف __init__(self, fname, lname): Person.__init__(self, fname, lname)
الآن، لقد أضفنا بنجاح وظيفة __init__() وتم الحفاظ على توريث الفئة الأب، ونحن مستعدون لتحديث وظيفة __init__()
استخدام وظيفة super()
يحتوي Python أيضًا على super()
الوظيفة، فإنها تجعل الفئة الفرعية تورث جميع الأساليب والخصائص من الفئة الأب
مثال
class Student(Person): تعريف __init__(self, fname, lname): super().__init__(fname, lname)
باستخدام super()
الوظيفة، لا تحتاج إلى استخدام اسم العنصر الأب، وسينتشر تلقائيًا من العنصر الأب الأساليب والخصائص.
إضافة الخاصية
مثال
ضع اسم graduationyear
إضافة خصائص Student
فئة:
class Student(Person): تعريف __init__(self, fname, lname): super().__init__(fname, lname) self.graduationyear = 2019
في هذا المثال، يجب أن يكون عام 2019 متغيرًا، وأن يتم تسليمه إلى فئة Student عند إنشاء جسم student. لهذا السبب، قم بإضافة متغير آخر إلى دالة __init__()
مثال
إضافة year
المواضيع، وقم بتسليم السنة الصحيحة عند إنشاء الجسم:
class Student(Person): def __init__(self, fname, lname, year) super().__init__(fname, lname) self.graduationyear = year x = Student("Elon", "Musk", 2019)
إضافة الطريقة
مثال
ضع اسم welcome
إضافة الطريقة إلى فئة Student:
class Student(Person): def __init__(self, fname, lname, year): super().__init__(fname, lname) self.graduationyear = year def welcome(self): print("مرحبًا", self.firstname, self.lastname, "في فئة", self.graduationyear)
نصيحة:إذا أضفت إلى فئة الفرعية طريقة تحمل الاسم نفسه كما في الطريقة في الفئة الأصلية، فإنك تغطي الوراثة للطريقة الأصلية.
- الصفحة السابقة فئات/أحداث Python
- الصفحة التالية التحور في Python