🐍 شرح Python

OOP المتقدّمة: الوراثة والتغليف

الوراثة (Inheritance)

تسمح لصنف بأن يرث خصائص ودوال صنف آخر، فلا نكرّر الكود. الصنف الأب (Parent) والصنف الابن (Child):

class Animal:
    def __init__(self, name):
        self.name = name

    def eat(self):
        return f"{self.name} يأكل"

class Dog(Animal):           # Dog يرث من Animal
    def bark(self):
        return f"{self.name} ينبح"

d = Dog("ريكس")
print(d.eat())    # ريكس يأكل (موروثة)
print(d.bark())   # ريكس ينبح (خاصة)

استدعاء الأب بـ super

class Employee:
    def __init__(self, name):
        self.name = name

class Manager(Employee):
    def __init__(self, name, team_size):
        super().__init__(name)    # استدعاء بناء الأب
        self.team_size = team_size

m = Manager("ليلى", 5)
print(m.name, m.team_size)   # ليلى 5

تعدّد الأشكال (Polymorphism)

نفس الدالة تتصرّف بشكل مختلف حسب الصنف:

class Cat:
    def sound(self):
        return "مياو"

class Duck:
    def sound(self):
        return "كواك"

for animal in [Cat(), Duck()]:
    print(animal.sound())     # مياو ثم كواك

التغليف (Encapsulation)

إخفاء البيانات الحسّاسة بجعلها "خاصة" بشرطتين سفليتين __:

class Account:
    def __init__(self, balance):
        self.__balance = balance     # خاصة

    def deposit(self, amount):
        if amount > 0:
            self.__balance += amount

    def get_balance(self):
        return self.__balance

acc = Account(100)
acc.deposit(50)
print(acc.get_balance())   # 150
# acc.__balance خطأ — محميّة من الوصول المباشر

جرّب بنفسك

🐍 محرّر بايثون
...جارٍ تحميل المحرّر
اضغط «تشغيل» لرؤية النتيجة هنا.

أخطاء شائعة

  • نسيان super().__init__() فلا تُهيّأ خصائص الأب.
  • توقّع حماية مطلقة من __ — هي تثبّط الوصول لا تمنعه تمامًا.

🎯 التالي: نظرة على مكتبات بايثون الشهيرة ومجالاتها.