logo

وراثة بايثون

الميراث هو جانب مهم من النموذج الموجه للكائنات. يوفر الميراث إمكانية إعادة استخدام التعليمات البرمجية للبرنامج لأنه يمكننا استخدام فئة موجودة لإنشاء فئة جديدة بدلاً من إنشائها من البداية.

في الميراث، تكتسب الفئة الفرعية الخصائص ويمكنها الوصول إلى جميع أعضاء البيانات والوظائف المحددة في الفئة الأصلية. يمكن للفئة الفرعية أيضًا توفير تطبيقها المحدد لوظائف الفئة الأصلية. في هذا القسم من البرنامج التعليمي، سنناقش الميراث بالتفصيل.

معرفات صالحة في جافا

في بايثون، يمكن للفئة المشتقة أن ترث الفئة الأساسية بمجرد ذكر القاعدة في القوس بعد اسم الفئة المشتقة. خذ بعين الاعتبار بناء الجملة التالي لوراثة فئة أساسية في الفئة المشتقة.

وراثة بايثون

بناء الجملة

 class derived-class(base class): 

يمكن للفصل أن يرث فئات متعددة عن طريق ذكرها جميعًا داخل القوس. خذ بعين الاعتبار بناء الجملة التالي.

بناء الجملة

 class derive-class(, , ..... ): 

مثال 1

 class Animal: def speak(self): print('Animal Speaking') #child class Dog inherits the base class Animal class Dog(Animal): def bark(self): print('dog barking') d = Dog() d.bark() d.speak() 

انتاج:

 dog barking Animal Speaking 

بايثون الوراثة متعددة المستويات

الوراثة متعددة المستويات ممكنة في لغة بايثون مثل اللغات الأخرى الموجهة للكائنات. تتم أرشفة الوراثة متعددة المستويات عندما ترث فئة مشتقة فئة مشتقة أخرى. لا يوجد حد لعدد المستويات التي يتم عندها أرشفة الميراث متعدد المستويات في بايثون.

وراثة بايثون

ويرد أدناه بناء جملة الميراث متعدد المستويات.

بناء الجملة

 class class1: class class2(class1): class class3(class2): . . 

مثال

 class Animal: def speak(self): print('Animal Speaking') #The child class Dog inherits the base class Animal class Dog(Animal): def bark(self): print('dog barking') #The child class Dogchild inherits another child class Dog class DogChild(Dog): def eat(self): print('Eating bread...') d = DogChild() d.bark() d.speak() d.eat() 

انتاج:

 dog barking Animal Speaking Eating bread... 

بايثون الميراث المتعدد

توفر لنا Python المرونة اللازمة لوراثة فئات أساسية متعددة في الفصل الفرعي.

وراثة بايثون

ويرد أدناه بناء الجملة لتنفيذ الميراث المتعدد.

بناء الجملة

 class Base1: class Base2: . . . class BaseN: class Derived(Base1, Base2, ...... BaseN): 

مثال

 class Calculation1: def Summation(self,a,b): return a+b; class Calculation2: def Multiplication(self,a,b): return a*b; class Derived(Calculation1,Calculation2): def Divide(self,a,b): return a/b; d = Derived() print(d.Summation(10,20)) print(d.Multiplication(10,20)) print(d.Divide(10,20)) 

انتاج:

 30 200 0.5 

طريقة issubclass(sub,sup).

يتم استخدام طريقة issubclass(sub, sub) للتحقق من العلاقات بين الفئات المحددة. وترجع صحيحًا إذا كانت الفئة الأولى هي فئة فرعية من الفئة الثانية، وخطأ في خلاف ذلك.

النظر في المثال التالي.

مثال

 class Calculation1: def Summation(self,a,b): return a+b; class Calculation2: def Multiplication(self,a,b): return a*b; class Derived(Calculation1,Calculation2): def Divide(self,a,b): return a/b; d = Derived() print(issubclass(Derived,Calculation2)) print(issubclass(Calculation1,Calculation2)) 

انتاج:

 True False 

طريقة isinstance (obj، class).

يتم استخدام طريقة isinstance() للتحقق من العلاقة بين الكائنات والفئات. يتم إرجاعه صحيحًا إذا كانت المعلمة الأولى، أي obj هي مثيل المعلمة الثانية، أي الفئة.

النظر في المثال التالي.

مثال

 class Calculation1: def Summation(self,a,b): return a+b; class Calculation2: def Multiplication(self,a,b): return a*b; class Derived(Calculation1,Calculation2): def Divide(self,a,b): return a/b; d = Derived() print(isinstance(d,Derived)) 

انتاج:

 True 

تجاوز الأسلوب

يمكننا توفير بعض التنفيذ المحدد لطريقة الفصل الأصلي في الفصل الفرعي الخاص بنا. عندما يتم تعريف طريقة الفئة الأصل في الفصل الفرعي مع بعض التنفيذ المحدد، فإن المفهوم يسمى تجاوز الطريقة. قد نحتاج إلى تنفيذ تجاوز الطريقة في السيناريو الذي يتطلب تعريفًا مختلفًا لطريقة الفئة الأصلية في الفئة الفرعية.

خذ بعين الاعتبار المثال التالي لتنفيذ تجاوز الطريقة في بايثون.

أعرج الخط

مثال

 class Animal: def speak(self): print('speaking') class Dog(Animal): def speak(self): print('Barking') d = Dog() d.speak() 

انتاج:

 Barking 

مثال واقعي لتجاوز الطريقة

 class Bank: def getroi(self): return 10; class SBI(Bank): def getroi(self): return 7; class ICICI(Bank): def getroi(self): return 8; b1 = Bank() b2 = SBI() b3 = ICICI() print('Bank Rate of interest:',b1.getroi()); print('SBI Rate of interest:',b2.getroi()); print('ICICI Rate of interest:',b3.getroi()); 

انتاج:

 Bank Rate of interest: 10 SBI Rate of interest: 7 ICICI Rate of interest: 8 

تجريد البيانات في بيثون

التجريد هو جانب مهم من البرمجة الشيئية. في بايثون، يمكننا أيضًا إخفاء البيانات عن طريق إضافة الشرطة السفلية المزدوجة (___) كبادئة للسمة التي سيتم إخفاؤها. بعد ذلك، لن تكون السمة مرئية خارج الفئة من خلال الكائن.

النظر في المثال التالي.

مثال

 class Employee: __count = 0; def __init__(self): Employee.__count = Employee.__count+1 def display(self): print('The number of employees',Employee.__count) emp = Employee() emp2 = Employee() try: print(emp.__count) finally: emp.display() 

انتاج:

 The number of employees 2 AttributeError: 'Employee' object has no attribute '__count'