وسائِل الصِّنف - class methods

وسائِلُ الصِّنْفِ - class methods

وسائِلُ الصِّنف
وسائل الصنف هي وسائل تُعرَّف في الأصناف(في مجال الصِّنف الدَّاخلي[الخاص]) أوَّل جدليَّة argument لها مبينة ألا وهي الصنف ذاته، ويمكن إستدعائها من الصنف أو من نموذجه(تُستَدعى من الصِّنف أكثر منه من النَّموذج).

* هذه الوسائل تتعرَّف على الصِّنف وليس لها عمل بالنَّموذج(الكائن).

* تُعرَّف هذه الوسائل ضمن الأصناف في إصدارات بايثون القديمة (بايثون<‎2.4) بإستخدام الإفادة def، بهذه الطريقة فقط:
حيثُ أنَّ:
name‏ هو إسم الوسيلة الذي تريده
وَ cls‏ هو الصِّنف الذي عَرَّفت فيه الوسيلة(مثل self‏ في وسائِل النَّموذَج)

وَ arguments‏ هي الجدلَّيات التي تحدِّدُها.
وَأخيرًا فإنَّنا نستخدم الدَّالة المُدمجة classmethod‏ لتحويل الوسيلة إلى وسيلة صِنْفٍ.

* في إصدارات بايثون الأحدث (بايثون>‎2.4) هنالك طريقة أخرى لتعريف وسائل الصنف إضافة للطريقة السابقة، حيث سنقوم بإستخدام مٌزَيِّن decorator‏ ونضعه فوق الوسيلة المُعرَّفة، هكذا:
مِنَ المؤكَّدِ أنَّك لاحظت الإختلاف عنِ الطَّريقة السَّابقة.. نعم، هذا هو المزين @classmethod‏ مُهِمَّتُهُ الإعلان عن وسيلة الصِّنف، حيثُ يوضع في نفس مستوى def الخاصَّة بالوسيلة.
إذا فرضنا أن إسم الصِّنف الذي عَرَّفت فيه وسيلة الصِّنف هو: C‏ وإسم وسيلة الصِّنف هو: f‏ ‏، فإنَّ إستدعائها على كِلا الصِّنف والنَّموذج يكون كالتَّالي:
(ملاحظة: هذه أمثلة بدائية)
الإستدعاء على الصنف..
C.f()
الإستدعاء على النموذج..
C().f()

* يمكن إستدعاء وسيلة الصِّنف دون القيام بنمذجة الصِّنف.
* بإستخدامك وسيلة الصِّنف فإنَّكَ تَحصل على الصِّنف الذَّي إستدعيت الوسيلة عليه كجدليَّة أُولى(مُعطى أوَّلي) مُبَيَّنَة [إذا إستدعيتها مباشرةً على الصِّنف] أوتحصل على صنف النَّموذج الذي إستُدعيت الوسيلة عليه [إذا إستدعيتها على النَّموذج].
* بالحصول على الصِّنف كأوَّل جدليَّة فإنَّ وسائل الصِّنف تلج بشكل مباشر إلى وسائل وصفات الصِّنف الأُخرى.
* تُستخدم وسيلة الصِّنف كبنَّاء بديل من أجل إستخدام دَلالي أفضل.
=> أفضل مثال صريح عن وسيلة صنف مدمجة هي dict.formkeys‏ تستخدم كبنَّاء بديل عن dict‏ (تكون هذه الوسيلة ملائمة عندما تَعرِف ما هي مفاتيحك وتريد أن تُحَدِّد قيم تفضيليَّة لها).
‎>‎>‎>‎ dict.formkeys(['a','b','c'])‏
{'c':None,'b':None,'a':None}

ليست هناك تعليقات:

إرسال تعليق