أتمنى التناقش للخروج بأفضل نتيجة.

  • هذه ليست تدوينة بل دعوة للتناقش.

  • هذه جزء من سلسلة.



  • سابقًا:
https://io.hsoub.com/go/49903

في بايثون -كما اللُّغات الأخرى- يمكنك تعريف أصناف أخرى خاصَّة بك إضافةً للأصناف المُدمجة Built-in(المبنيَّة داخليًّا)[١]، وَذلك سهل!.

تُستخدم الإفادة statement «صنف» class (أوَّل حرف من class صغير وليس كبير فبايثون حسَّاسة لحالة الأحرف كما تعلم) من أجل تعريف صنفك الجديد، ولها هذه الصِياغة العامَّة:

class ClassName(Parent1, Parent2,…):
    ClassBody

كما نرى، استخدمنا الإفادة class ثُمَّ أتبعناها بإسم الصنف (عُرف: أجمع مبرمجو بايثون على جعل اسم الصنف يبدأ بحرف كبير بُغية تمييزه وتسهيل قراءة رِمازات(شِفرات) البرنامج أو المكتبة) وَأضفنا قوسين(هلالين) بداخلهما الأصناف الَّتي نرغب بأن يرث منها صنفنا وَأشرت لها بِـوالِد/أب Parent، ثُمَّ نقطتان(الشارِحة) لنبدأ بعدها تعريف جسد الصنف (يُشار لِما يُكتب في سطر class بِـرأس الصنف). فالنبدأ أولى خطواتنا بتعريف أبسط صنف بايثونيّ: class C(): pass

  • مُلاحظة ١: يُمكن تعريف الصنف دون استخدام القوسين بعد اسم الصنف، هكذا: class C:

  • مُلاحظة ٢: في بايثون ٣، يرث الصنف الَّذي تُعَرَّفه من الصنف «كائِن» object مباشرة عند تعريفك للصنف -دون إذن منك!- بينما في بابثون ٢ كان أمرًا إختياريًّا باستخدامك للصياغة: class C(object): pass

وَيعُرَف الصنف الوارِث من object بإسم: «صنف الأُسلوب الجديد» New-Style Class.


[١] الأصناف المُدمجة: إشارةً إلى list, dict, str…إلخ.