تعريف الأصناف وإنشاؤها
ذكرنا أن الصنف يعرِّفُ أمرين:
-
الحال (State): وهي المعرَّفات التي تصف الشيء نفسه.
- مثل: الطول واللون والسرعة
-
الانتقال (Transition): وهي المعرَّفات التي تغيِّر شيئًا من صفاته.
- مثل: تعيين لون جديد أو زيادة في السرعة
مثال الحال والانتقال في القائمة (list)
القائمة (list) يتم إنشاؤها بالقوسين المربعين []، وهذا من اختصارات بايثون. والأصل أن الكائن يتمُّ إنشاؤه بذكر صنفه مع القوسين () ليتم استدعاء الإجراء المُنشئ للكائن، على هذا النحو:
فأما حال القائمة: قيم العناصر وموضعها وعددها.
- ويُمكِنُ قراءتها بـ
xs[0]وlen(xs)و.index(10)و10 in xs - والكتابة بـ
.appendو.removeوتعديل المواضع
وهلم جرا في كل شيء في بايثون.
تعريف صنف جديد
يُعرَّف الصنف بالكلمة المفتاحية class ونجعل فيه الأمرين:
- الحال: العدُّ (
count) الذي يزيد وينقص - الانتقال: الزيادة عن طريق الدالة (
increment)
ويأتي بيانه بعد قليل:
إنشاء كائن
ثم لإنشاء كائن من ذلك الصنف، تتم كتابة اسم الصنف ثم القوسان وبينهما معطيات الدالة الخاصَّة __init__ على النحو التالي:
قراءة الحال
ثم يمكن قراءة حاله بعامل الإسناد (.) للاسم count له على النحو التالي:
إعمال الانتقال
ويكون الانتقال كذلك بعامل الإسناد (.) لكن باسم الدالة مع القوسين للاستدعاء، على النحو التالي:
تعدد الكائنات للصنف الواحد
يمكن تعيين كائنات (Instances) متباينة في الأحوال على هذا النحو:
النفس (self)
ربما تتساءل عن المعطى: نفس (self) في تعريف جميع الدوال داخل الصنف، ماذا يشير إليه؟ إنَّ self (نفس) تتقدَّم معطيات جميع الطرائق؛ وهي تشير للكائن المعيَّن الذي ينشأُ لاحقًا.
العرض (__repr__)
الأصل عند الطباعة print(x) أن يعرض عنوان الشيء في الذاكرة.
نمثل بمثال المتجَّه (Vector) هنا:
وهذا ليس مفيدًّا لذلك نخصص طريقة العرض إما بالطريقة الخاصة __repr__ أو __str__ حيث الأولى تكون مع print وبغيرها.