AzLearn

الفئات والكائنات

Classes & Objects

مفهوم ~22 دقيقة

الفئات والكائنات — Classes & Objects

في دروس سابقة استخدمنا أنواع Python المدمجة: قوائم، قواميس، أعداد، نصوص. هذه الأنواع لها بيانات وسلوك — مثلاً القائمة list تختزن عناصر وتوفر أسلوب append. الفئة (Class) هي الأداة التي تتيح لك بناء أنواع خاصة بك تجمع البيانات والسلوك في وحدة واحدة.

إذا درست Go من قبل، تذكّر أن struct يجمع الحقول ثم تُضاف له الأساليب من الخارج. في Python كل شيء يعيش داخل الكلاس: الحقول والأساليب في مكان واحد.

ما هي الفئة؟

الفئة (Class) هي قالب أو مخطط. الكائن (Object أو Instance) هو نسخة حقيقية مُنشأة من هذا القالب. يمكنك صنع مئة طالب مختلف من فئة Student واحدة — كل واحد يحتفظ ببياناته المستقلة.

تعريف فئة بسيطة

main.go

دالة __init__ وself

الدالة __init__ هي دالة البناء (Constructor) — يستدعيها Python تلقائياً عند إنشاء كائن جديد بكتابة Student(...). لا تستدعيها أنت يدوياً.

كلمة self هي المعامل الأول في كل أسلوب داخل الكلاس. تمثّل الكائن الحالي. عندما تكتب s1.describe() يُمرَّر s1 تلقائياً كـself داخل الأسلوب. هذه الآلية هي ما يجعل كل كائن يحمل بياناته المستقلة.

قاعدة: اسم self اصطلاح وليس كلمة مفتاحية — يمكن تسميته this أو أي شيء آخر، لكن self هو الاصطلاح الثابت في مجتمع Python ولا تحيد عنه.

خصائص الفئة مقابل خصائص الكائن

هناك نوعان من الخصائص:

main.go

الفرق المهم: خاصية الفئة (class attribute) مشتركة بين جميع الكائنات، أما خاصية الكائن (instance attribute) فمستقلة لكل نسخة. عندما تشك، استخدم instance attributes داخل __init__.

إضافة أساليب متعددة

الأسلوب (Method) هو دالة تعيش داخل الكلاس. الفرق الوحيد عن الدالة العادية هو وجود self كأول معامل.

main.go

تعديل الخصائص بعد الإنشاء

الخصائص ليست مقيّدة بعد الإنشاء — يمكن تعديلها مباشرة أو عبر أساليب:

main.go

كائنات كمعاملات وقيم إرجاع

الكائنات في Python مجرد قيم — يمكن تمريرها للدوال وإرجاعها وتخزينها في قوائم:

main.go

الكلاس مقابل القاموس

قد تتساءل: لماذا نستخدم كلاساً بدلاً من قاموس؟

# بالقاموس — Using a dict
student = {"name": "أحمد", "grade": 88}

# بالكلاس — Using a class
student = Student("أحمد", 88)

الكلاس يضيف ثلاثة أشياء يعجز عنها القاموس:

  1. سلوك مُضمَّن — الأساليب تعيش مع البيانات، لا تعيش في مكان آخر.
  2. تحقق وصيانة — يمكن التحقق من صحة البيانات داخل __init__ وداخل الأساليب.
  3. عقد واضح — كل من يرى Student يعرف أنها كائن بخاصتي name وgrade، لا يضطر لتخمين مفاتيح القاموس.

في المشاريع الصغيرة كلاهما يعمل. في المشاريع الكبيرة الكلاس أوضح وأقل عرضة للأخطاء.

تحدي — Challenge