وسائِلُ الصِّنْفِ - class methods
وسائِلُ الصِّنف
وسائل الصنف هي وسائل تُعرَّف في الأصناف(في مجال الصِّنف الدَّاخلي[الخاص]) أوَّل جدليَّة argument لها مبينة ألا وهي الصنف ذاته، ويمكن إستدعائها من الصنف أو من نموذجه(تُستَدعى من الصِّنف أكثر منه من النَّموذج).
* هذه الوسائل تتعرَّف على الصِّنف وليس لها عمل بالنَّموذج(الكائن).
* تُعرَّف هذه الوسائل ضمن الأصناف في إصدارات بايثون القديمة (بايثون<2.4) بإستخدام الإفادة def، بهذه الطريقة فقط:
name هو إسم الوسيلة الذي تريده
وَ cls هو الصِّنف الذي عَرَّفت فيه الوسيلة(مثل self في وسائِل النَّموذَج)
وَ arguments هي الجدلَّيات التي تحدِّدُها.
وَأخيرًا فإنَّنا نستخدم الدَّالة المُدمجة classmethod لتحويل الوسيلة إلى وسيلة صِنْفٍ.
* في إصدارات بايثون الأحدث (بايثون>2.4) هنالك طريقة أخرى لتعريف وسائل الصنف إضافة للطريقة السابقة، حيث سنقوم بإستخدام مٌزَيِّن decorator ونضعه فوق الوسيلة المُعرَّفة، هكذا:
إذا فرضنا أن إسم الصِّنف الذي عَرَّفت فيه وسيلة الصِّنف هو: C وإسم وسيلة الصِّنف هو: f ، فإنَّ إستدعائها على كِلا الصِّنف والنَّموذج يكون كالتَّالي:
(ملاحظة: هذه أمثلة بدائية)
الإستدعاء على الصنف..
C.f()
الإستدعاء على النموذج..
C().f()
* يمكن إستدعاء وسيلة الصِّنف دون القيام بنمذجة الصِّنف.
* بإستخدامك وسيلة الصِّنف فإنَّكَ تَحصل على الصِّنف الذَّي إستدعيت الوسيلة عليه كجدليَّة أُولى(مُعطى أوَّلي) مُبَيَّنَة [إذا إستدعيتها مباشرةً على الصِّنف] أوتحصل على صنف النَّموذج الذي إستُدعيت الوسيلة عليه [إذا إستدعيتها على النَّموذج].
* بالحصول على الصِّنف كأوَّل جدليَّة فإنَّ وسائل الصِّنف تلج بشكل مباشر إلى وسائل وصفات الصِّنف الأُخرى.
* تُستخدم وسيلة الصِّنف كبنَّاء بديل من أجل إستخدام دَلالي أفضل.
=> أفضل مثال صريح عن وسيلة صنف مدمجة هي dict.formkeys تستخدم كبنَّاء بديل عن dict (تكون هذه الوسيلة ملائمة عندما تَعرِف ما هي مفاتيحك وتريد أن تُحَدِّد قيم تفضيليَّة لها).
>>> dict.formkeys(['a','b','c'])
{'c':None,'b':None,'a':None}
ليست هناك تعليقات:
إرسال تعليق