تعريف الأصناف - برمجة كائِنيَّة التوجُّه | خطوة على الدرب #oop

  • samer_jabal

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

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

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



  • سابقًا:
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…إلخ.

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

أولا أشكرك على الموضوع

ثانيا ما الذي جعل مطوري بايثون يغيرون طريقة توريث الصفات من الأصلي إلى الأبناء

ثالثا أنت لم تذكر طريقة صنع الكائن و تحديد عناصره

ثانيا ما الذي جعل مطوري بايثون يغيرون طريقة توريث الصفات من الأصلي إلى الأبناء

إذا كنت تقصد ما ذكرته عن object، فهو لأجل تسهيل استخدام super.

ثالثا أنت لم تذكر طريقة صنع الكائن و تحديد عناصره

أعي ذلك، تعمدت جعل ما كتبت بسيطًا ليدخل القارئ في الجو.. لاحقًا، ستصبح الأمور أكثر تعقيدًا.