الأصناف في بايثون
تعدّ الأصناف وسيلة لجمع البيانات والعمليات في بوتقة واحدة، ويؤدي إنشاء صنف جديد إلى تكوين نوع جديد من الكائنات، ما يتيح إنشاء نسخ (instances) من ذلك النوع. يمكن أن ترتبط بكلّ صنف مجموعة من الخاصيات (attributes) التي تساعد في متابعة حالة الصنف، إضافة إلى مجموعة من التوابع (methods) التي تساعد في تعديل حالة ذلك الصنف.
لو أجرينا مقارنة بين بايثون ولغات البرمجة الأخرى، سنجد بأنّ بايثون تضيف قدرًا ضئيلًا من الصياغات الجديدة إلى الأصناف؛ إذ تعتمد بايثون أساليب متّبعة في لغتي C++ و Modula-3.
توفّر الأصناف في بايثون جميع الميزات المعتمدة في البرمجة كائنية التوجه، فيمكن أن يرث الصنف من أصناف أخرى متعددة، ويمكن للصنف المشتق من صنف آخر أن يتجاوز (override) على التوابع الخاصة بالصنف أو الأصناف الأساسية، ويمكن للتابع أن يستدعي التابع الخاص بالصنف الأساسي باستخدام الاسم ذاته.
يمكن للأصناف أن تتضمن عددًا غير محدّدٍ من البيانات، وكما هو الحال في الوحدات (modules) فإنّ الأصناف هي جزء من الطبيعة الديناميكية لبايثون، إذ يمكن إنشاؤها في وقت التشغيل بل ويمكن تعديلها بعد إنشائها أيضًا.
في لغة C++ تكون عناصر الصنف عادة (وبضمنها عناصر البيانات) عامّة (public، باستثناء المتغيرات الخاصة Private Variables) وتكون جميع دوالّ الصنف ظاهريةً (virtual).
كما هو الحال في Modula-3 لا توجد طرائق مختصرة للإشارة إلى عناصر الكائن عن طريق توابعه، بل يجري التصريح عن التابع مع تحديد الوسيط الأول الذي يمثّل الكائن والذي تقدّمه اللغة بصورة ضمنية بواسطة الاستدعاء.
كما هو الحال في Smalltalk فإنّ الأصناف هي كائنات بحدّ ذاتها وهكذا يمكن تقديم صياغات لاستيراد الأصناف وإعادة تسميتها.
على العكس من C++ و Modula-3، يمكن استخدام أنواع البيانات الداخلية كأصناف أساسية يمكن للمستخدم أن يوسّعها حسب حاجته، كذلك يمكن إعادة تعريف معظم العوامل الداخلية -كما هو الحال في C++- التي تمتلك صيغة خاصة (مثل العوامل الحسابية) في نسخ الأصناف.
مصادر
- صفحة Classes في توثيق بايثون الرسمي.