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