تعريف الأصناف وإنشاؤها

ذكرنا أن الصنف يعرِّفُ أمرين:

  1. الحال (State): وهي المعرَّفات التي تصف الشيء نفسه.

    • مثل: الطول واللون والسرعة
  2. الانتقال (Transition): وهي المعرَّفات التي تغيِّر شيئًا من صفاته.

    • مثل: تعيين لون جديد أو زيادة في السرعة

مثال الحال والانتقال في القائمة (list)

القائمة (list) يتم إنشاؤها بالقوسين المربعين []، وهذا من اختصارات بايثون. والأصل أن الكائن يتمُّ إنشاؤه بذكر صنفه مع القوسين () ليتم استدعاء الإجراء المُنشئ للكائن، على هذا النحو:

فأما حال القائمة: قيم العناصر وموضعها وعددها.

  • ويُمكِنُ قراءتها بـ xs[0] و len(xs) و .index(10) و 10 in xs
  • والكتابة بـ .append و .remove وتعديل المواضع

وهلم جرا في كل شيء في بايثون.

تعريف صنف جديد

يُعرَّف الصنف بالكلمة المفتاحية class ونجعل فيه الأمرين:

  1. الحال: العدُّ (count) الذي يزيد وينقص
  2. الانتقال: الزيادة عن طريق الدالة (increment)

صنف العداد

ويأتي بيانه بعد قليل:

إنشاء كائن

ثم لإنشاء كائن من ذلك الصنف، تتم كتابة اسم الصنف ثم القوسان وبينهما معطيات الدالة الخاصَّة __init__ على النحو التالي:

قراءة الحال

ثم يمكن قراءة حاله بعامل الإسناد (.) للاسم count له على النحو التالي:

إعمال الانتقال

ويكون الانتقال كذلك بعامل الإسناد (.) لكن باسم الدالة مع القوسين للاستدعاء، على النحو التالي:

تعدد الكائنات للصنف الواحد

يمكن تعيين كائنات (Instances) متباينة في الأحوال على هذا النحو:

النفس (self)

ربما تتساءل عن المعطى: نفس (self) في تعريف جميع الدوال داخل الصنف، ماذا يشير إليه؟ إنَّ self (نفس) تتقدَّم معطيات جميع الطرائق؛ وهي تشير للكائن المعيَّن الذي ينشأُ لاحقًا.

عدادان c1 و c2، لكل منهما عدٌّ مختلف

العرض (__repr__)

الأصل عند الطباعة print(x) أن يعرض عنوان الشيء في الذاكرة.

نمثل بمثال المتجَّه (Vector) هنا:

وهذا ليس مفيدًّا لذلك نخصص طريقة العرض إما بالطريقة الخاصة __repr__ أو __str__ حيث الأولى تكون مع print وبغيرها.