دروس بايثون

شرح Classes and Objects في بايثون بالتفصيل مع أمثلة عملية للمبتدئين

دليل المبتدئين: شرح Classes and Objects في بايثون

تُعتبر لغة بايثون واحدة من أقوى لغات البرمجة وأكثرها مرونة، ويعود جزء كبير من هذه القوة إلى اعتمادها على مفهوم “البرمجة كائنية التوجه” (Object-Oriented Programming – OOP). إذا كنت قد بدأت رحلتك في تعلم البرمجة، فلا بد أنك سمعت مصطلحات مثل “الفئات” و”الكائنات”. في هذا المقال، سنقدم شرح Classes and Objects في بايثون بطريقة مبسطة وعملية تساعدك على نقل مهاراتك البرمجية إلى المستوى التالي.

ما هي الفئات (Classes) والكائنات (Objects)؟

لفهم هذا المفهوم، دعنا نستخدم مثالاً من العالم الحقيقي. تخيل أنك مهندس معماري تريد بناء مجموعة من المنازل. قبل البدء في البناء، ستحتاج إلى “مخطط هندسي” (Blueprint) يحدد مواصفات المنزل (عدد الغرف، الطوابق، المساحة).

  1. الـ Class (الفئة): هي ذلك المخطط الهندسي. هي قالب يحدد الخصائص والسلوكيات التي سيمتلكها الكائن، لكنها ليست كائناً حقيقياً بحد ذاتها.
  2. الـ Object (الكائن): هو المنزل الفعلي الذي تم بناؤه بناءً على ذلك المخطط. يمكنك بناء عشرات المنازل (Objects) من مخطط واحد (Class)، وكل منزل قد يختلف في لونه أو اسم صاحبه، لكن جميعها تتبع نفس التصميم الأساسي.

باختصار، عند شرح Classes and Objects في بايثون، نقول إن الـ Class هو القالب، والـ Object هو التطبيق العملي لهذا القالب.

كيف تنشئ Class في بايثون؟

بدء العمل مع الفئات في بايثون بسيط للغاية. نستخدم الكلمة المحجوزة class متبوعة باسم الفئة (يُفضل أن يبدأ بحرف كبير).

class Car:
    pass

في المثال أعلاه، قمنا بإنشاء فئة فارغة تسمى Car. لإنشاء كائن (Object) من هذه الفئة، نقوم بكتابة اسم الفئة متبوعاً بأقواس:

my_car = Car()

فهم دالة __init__ وكلمة self

عند الحديث عن شرح Classes and Objects في بايثون، لا يمكننا إغفال دالة المنشئ __init__. هذه الدالة تُنفذ تلقائياً بمجرد إنشاء كائن جديد من الفئة، وتُستخدم لتعيين القيم الأولية لخصائص الكائن.

أما كلمة self فهي تشير إلى الكائن الحالي الذي يتم إنشاؤه. من خلال self نتمكن من الوصول إلى المتغيرات والوظائف داخل الفئة.

مثال توضيحي:

class Car:
    def __init__(self, brand, year):
        self.brand = brand  # خاصية الماركة
        self.year = year    # خاصية السنة

الآن عند إنشاء كائن، نمرر القيم المطلوبة:

car1 = Car("Toyota", 2022)
car2 = Car("Tesla", 2024)

print(car1.brand) # سيطبع: Toyota

إضافة الوظائف (Methods) للكائن

الفئات لا تقتصر فقط على تخزين البيانات (الخصائص)، بل يمكنها أيضاً القيام بأفعال. هذه الأفعال تُسمى “Methods” وهي ببساطة دوال تُعرف داخل الـ Class.

لنقم بتطوير مثال السيارة ليحتوي على وظيفة للقيادة:

class Car:
    def __init__(self, brand, color):
        self.brand = brand
        self.color = color
    
    def drive(self):
        print(f"The {self.color} {self.brand} is now moving!")

إنشاء كائن واستدعاء الوظيفة


my_car = Car("BMW", "Black")
my_car.drive()

مميزات استخدام الـ Classes في البرمجة

بعد هذا الـ شرح Classes and Objects في بايثون، قد تتساءل: لماذا لا أستخدم المتغيرات والدوال العادية فقط؟ إليك الأسباب:

  • التنظيم: تجميع البيانات والوظائف المتعلقة بشيء معين في مكان واحد.
  • إعادة الاستخدام: يمكنك كتابة الكود مرة واحدة في الـ Class واستخدامه لإنشاء مئات الكائنات.
  • السهولة في التعديل: إذا أردت تغيير سلوك كل السيارات في برنامجك، ستقوم بتعديل الـ Class فقط، وسيتم تطبيق التغيير على جميع الكائنات تلقائياً.
  • النمذجة الواقعية: تتيح لك تمثيل الأشياء من العالم الحقيقي (مستخدمين، منتجات، مركبات) بشكل منطقي داخل الكود.

مثال عملي شامل: نظام إدارة الموظفين

لنطبق كل ما تعلمناه في مثال برمجي متكامل يوضح قوة الكائنات في بايثون:

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

    def display_info(self):
        print(f"Employee: {self.name}, Salary: {self.salary}$")

    def apply_raise(self, percentage):
        self.salary += self.salary * (percentage / 100)
        print(f"Raise applied! New salary for {self.name}: {self.salary}$")

إنشاء موظفين (Objects)


emp1 = Employee("Ahmed", 5000)
emp2 = Employee("Sara", 7000)

استخدام الوظائف


emp1.display_info()
emp1.apply_raise(10)

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

مقالات ذات صلة