الدرس الثامن عشر -الوراثة-Python Inheritance

 

Python Inheritance  الوراثة :

 

الوراثة تسمح لنا بإنشاء او تعريف كلاس يرث كل صفات وخصائص الكلاس  الاخر .

الفئة الرئيسية (Parent class) هي الفئة  الموروثة ، وتسمى أيضًا الفئة الأساسية

فئة الابن (Child class ) هي الطبقة التي ترث من فئة أخرى ، وتسمى أيضًا فئة مشتقة

Create a Parent Class الفئة الرئيسية

الفئة الرئيسية هي عبارة عن كلاس , أي فئة او كلاس يمكن ان تكون فئة رئيسية

 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()

 

Create a Child Class انشاء الفئة الابن  :

لإنشاء كلاس يرث من كلاس اخر خصائصه ودواله نقوم بإنشاء كلاس جديد ونمرر اسم الكلاس الاخر كمعامل او متغير .

 

class Student(Person):
 
pass

نستخدم الكلمة pass  في حالة لا توجد دوال وخصائص لهذا الكلاس

 

مثال تطبيقي :

استخدام الكلاس person  لانشاء كائنات  

x = Student("Mike", "Olsen")
x.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()

 

class Student(Person):

  pass 

 

x = Student("Mike""Olsen")

x.printname()

 

#Return

John Doe

Mike Olsen

 

Add the __init__() Function

عند استخدام الدالة  _init_()  نستغني عن  الكلمة pass 

 

class Student(Person):
  def __init__(self, fname, lname):
    #add properties etc.

عند إضافة  الدالة  _init_()  للكلاس الابن فانه لا يستطيع ان يرث خصائص الدالة  _init_() للكلاس الاب .

لاستخدام الدالة  _init_() للكلاس الاب يجب استدعاءها .

 

class Student(Person):
  def __init__(self, fname, lname):
    Person.__init__(self, fname, lname)   استدعاء دالة الكلاس الاب

 

 

the super() Function

 

تسمح هذه الدالة للكلاس الابن ان يرث جميع دوال وخوص الكلاس الاب تستغني عن استخدام اسم الكلاس الاب عند استدعاء دالة _init_()

 

class Student(Person):
  def __init__(self, fname, lname):
    super().__init__(fname, lname)

إضافة خصائص للكلاس الابن :

 

class Student(Person):
  def __init__(self, fname, lname):
    super().__init__(fname, lname)
    self.graduationyear = 2019

اضفنا خاصية سنة التخرج ..

 

نقوم بتعديل دالة _init_() للكلاس الابن وجعل سنة التحرج كمتغير

 

class Student(Person):
  def __init__(self, fname, lname, year):
    super().__init__(fname, lname)
    self.graduationyear = year

x = Student(
"Mike", "Olsen", 2019)

print(X)

 

المثال كامل :

 

class Person:

  def __init__(self, fname, lname):

    self.firstname = fname

    self.lastname = lname

 

  def printname(self):

    print(self.firstname, self.lastname)

 

x = Person("John""Doe")

x.printname()

 

class Student(Person):

  def __init__(self, fname, lname, year):

    super().__init__(fname, lname)

    self.graduationyear = year

 

y = Student("Mike""Olsen"2019)

print(y.firstname,y.lastname,y.graduationyear)

 

#Return

Mike Olsen 2019