وراثة بايثون
وراثة بايثون
يتيح لنا الوراثة تحديد فئة ترث جميع الوظائف والخصائص من فئة أخرى.
فئة الأصل هي الفئة الموروثة منها ، وتسمى أيضًا الفئة الأساسية.
الفئة الفرعية هي الفئة التي ترث من فئة أخرى ، وتسمى أيضًا الفئة المشتقة.
قم بإنشاء فصل للوالدين
يمكن لأي فصل أن يكون فصلًا أصليًا ، وبالتالي فإن بناء الجملة هو نفسه إنشاء أي فئة أخرى:
مثال
أنشئ فئة باسم Person
، مع
firstname
وخصائص lastname
، printname
وطريقة:
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname,
self.lastname)
#Use the Person class to create an object, and then
execute the printname method:
x = Person("John", "Doe")
x.printname()
قم بإنشاء فصل دراسي تابع
لإنشاء فئة ترث الوظيفة من فئة أخرى ، أرسل الفئة الأصل كمعامل عند إنشاء الفئة الفرعية:
مثال
قم بإنشاء فئة باسم Student
، والتي سترث الخصائص والطرق من Person
الفئة:
class Student(Person):
pass
ملاحظة: استخدم pass
الكلمة الأساسية عندما لا تريد إضافة أي خصائص أو طرق أخرى إلى الفصل الدراسي.
الآن فئة الطالب لها نفس الخصائص والأساليب مثل فئة الشخص.
مثال
استخدم Student
الفئة لإنشاء كائن ، ثم نفّذ printname
الطريقة:
x = Student("Mike", "Olsen")
x.printname()
أضف دالة __init __ ()
لقد أنشأنا حتى الآن فئة فرعية ترث الخصائص والطرق من أصلها.
نريد إضافة __init__()
الوظيفة إلى فئة الأطفال (بدلاً من pass
الكلمة الأساسية).
ملاحظة: يتم __init__()
استدعاء الوظيفة تلقائيًا في كل مرة يتم فيها استخدام الفئة لإنشاء كائن جديد.
مثال
أضف __init__()
الوظيفة إلى
Student
الفصل الدراسي:
class Student(Person):
def __init__(self, fname, lname):
#add properties etc.
عند إضافة __init__()
الوظيفة ، لن ترث الفئة الفرعية __init__()
وظيفة الأصل.
ملاحظة: تتجاوز__init__()
وظيفة الطفل وراثة وظيفة الوالد.
__init__()
للحفاظ على وراثة __init__()
وظيفة الوالد ، أضف استدعاءًا لوظيفة الوالد __init__()
:
مثال
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)
لقد نجحنا الآن في إضافة وظيفة __init __ () ، واحتفظنا بميراث الفئة الأصلية ، ونحن مستعدون لإضافة وظائف في
__init__()
الوظيفة.
استخدم الوظيفة الفائقة ()
لدى Python أيضًا super()
وظيفة تجعل الفئة الفرعية ترث جميع الوظائف والخصائص من أصلها:
مثال
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
باستخدام super()
الوظيفة ، لا يتعين عليك استخدام اسم العنصر الأصل ، حيث سيرث تلقائيًا الأساليب والخصائص من العنصر الأصل.
أضف خصائص
مثال
أضف خاصية تسمى graduationyear
الفئة
Student
:
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
self.graduationyear
= 2019
في المثال أدناه ، 2019
يجب أن يكون العام متغيرًا ، ويتم تمريره إلى
Student
الفصل عند إنشاء عناصر الطالب. للقيام بذلك ، أضف معلمة أخرى في وظيفة __init __ ():
مثال
أضف year
معلمة ، واجتاز السنة الصحيحة عند إنشاء الكائنات:
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear
= year
x = Student("Mike", "Olsen", 2019)
طرق إضافة
مثال
أضف طريقة تسمى welcome
للفصل
Student
:
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear
= year
def welcome(self):
print("Welcome",
self.firstname, self.lastname, "to the class of", self.graduationyear)
إذا أضفت عملية في الصنف الفرعي بنفس اسم دالة في الصنف الأصل ، فسيتم تجاوز وراثة الطريقة الأصل.