OOP: Inheritance - Arabic


ملاحظة: ﻻزم تكون قريت الـ Introduction

 

عندنا Class اسمه Bird خصائصه:

 

Legs *

* Wings

* Feather

* Tail

 

لو عاوز اعمل Class اسمه Duck هيكون مشترك مع Class الـ Bird في الخصائص الـ ذكرنها, الـ Inheritance بتقول ان بدل ما أعيد كتابة نفس الخصائص دي مرة تانية داخل Class الـ Duck استخدم خصائص الـ Bird Class وازود خصائص للـ Duck كالتالي:

 

* خصائص الـ Bird

* Swimming

 

لو نفس الخصائص لكن بدون Inherit خصائص الـ Duck هتكون:

* Legs

* Wings

* Feather

* Tail

* Swimming

 

Inheritance with Python

 

في البرمجة الـ Inheritance, بيخلي الكود يمكن اعادة استخدام خصائصة, عموما كل حاجة في الـ Python عبارة عن Object وبالتالي الـ Inheritance بيحصل طول الوقت, بالكود التالي هوريك ازاي ان الـ Inheritance بيحصل By Default داخل الـ  Python:

 

* هـ Declare الـ Class عادي

* اظهر كل الخصائص (Members)

 

المقصود بالـ Members كل الـ Data Types والـ Methods الـ داخل الـ Class

 

class MyClass():
    pass

print(dir(MyClass))

 

هنا تلاحظ ظهور List طويلة مع اني مكتبتش حاجة داخل الـ Class ولكن لأن الـ Class ذات نفسه عامل Iherite من Class اسمه Object والـ Members دي متعرفة داخل الـ Object ... وزي المثال بتاع الـ Brid والـ Duck الـ MyClass بتستخدم كل خصائص الـ Object يعني لو هـ Iherite بطريقة واضحة تماما هتكون كالتالي:

 

class MyClass(object):
    pass

 

لكنها كتابة ملهاش لازمة, مع ذلك في Seniors بينصحه بكتابة الـ Object, المهم تكون فهمت الفكرة.

 

ملاحظة: بالـ Python2  الـ Object بتكون مطلوبة.

 

في فكرة كمان بالـ Inheritance وهي الاستبدال, مثلآ, لو B مكون من كل خصائص A فيمكن استبدال A بـ B دون فقض للـ خصائص, شوف المثال التالي:

 

* هـ Declare Base Class

* وبعدين هاعمل Derived Class

* هاكون Object من الـ Derived Class

* الـ Inheritance مرة تانية

 

class MyClass:
   """Create base class."""

   def __init__(self):
       print('Hello Geek!')

   def kind(self):
       return f"I'm a human being."

 

هنا الـ Class بيظهر رسالة "Hello Geeks" بمجرد ما يتم استدعائه, وبتظهر رسالة ثانية عند استدعاء الـ Kind Method

 

o = MyClass()

# Regular call
o
# Call the kind() method
print(o.kind())

 

لو طبقنا النقطة السابقة بتاعت استدعاء الـ Members هتلاحظ ظهور نفس الـ List مع زيادة الـ Kind Method

 

print(dir(MyClass))

 

 

الخطوة التالية نقوم بعمل Inherit من الـ Base Class, الـ Class الثانوي من الـ Base Class زي الكود التالي اسمه Derived Class

 

class TheyClass(MyClass):
   """Derived class from MyClass."""

   def get_my_kind(self):
       """Access base class method."""
       print(f"Derived class says: {self.kind()}")

 

لاحظ هنا:

* هاعمل نفس الخطوات السابقة من استدعاء للـ Class عادي

* الـ Inherit تم لما ظهرت الرسالة الأولي

* ولما قمت باستدعاء الـ ()get_my_kind

 

# Use derived class instead of base class.
d_c = TheyClass()

# Base class method
print(d_c.kind())
# Derived class method
d_c.get_my_kind()

 

 

المثال ده هعمل Class مفيهوش اي حاجة لكن اقدر  استدعي كل الـ Methods

 

class Human(TheyClass):
    pass

h = Human()
h.kind()
h.get_my_kind()
h.name('Mohamed')

 

 

المقال التالي: Method Resolution Order

المقال السابق: Introduction