في عالم البرمجة بلغة Python، فإن فهم استخدام الكلمة المفتاحية “self” في الكلاسات (الصفوف) يعتبر مهمًا لفهم مفهوم البرمجة الشيئية. عندما تنشئ كلاسًا جديدًا في Python، فإنك تعرف عناصر البيانات والأساليب التي تتعامل معها هذه العناصر. عندما تنشئ دالة (أو طريقة) داخل الكلاس، يجب أن تضع الكلمة “self” كمعامل أول لهذه الدالة.
في سياقك، عندما تقوم بتعريف الدالة __init__
في الكلاس، فإن الهدف هو تهيئة الكائنات التي تنشئها من الكلاس. باستخدام الكلمة “self”، تعرف Python أن الخصائص (أو المتغيرات) التي تحددها في الدالة __init__
تنتمي إلى الكائن الذي تم إنشاؤه. عندما تقوم بكتابة self.a = a
، فإنك تخبر Python أنه يجب تخزين قيمة المتغير “a” في الكائن الحالي باسم “a”. وبفضل ذلك، يمكنك الوصول إلى هذه المتغيرات داخل أي دالة أخرى في الكلاس باستخدام self.a
.
بشكل أساسي، الكلمة “self” تشير إلى الكائن الذي يتم إنشاؤه من الكلاس. بدون استخدام “self”، لا يمكنك الوصول إلى الخصائص أو الأساليب داخل الكلاس بشكل صحيح.
بالنسبة لسؤالك الثاني حول الفرق بين تعريف الكلاس مع المعلمة وبدونها، هناك بعض النقاط التي يجب التوضيح عنها:
class hello(object):
: هذا التعريف يستخدم تعبيرًا يشير إلى أن الكلاس “hello” يرث من الكلاس “object”، الذي هو الكلاس الأساسي في Python.class hello():
: هنا، لا توجد معلمة تعريفية للكلاس. يعتبر هذا التعريف بسيطًا ولا يحتوي على تفاصيل إضافية.class hello:
: هذا التعريف أيضًا بسيط ويشير إلى تعريف كلاس بسيط بدون معلمات.
في Python 3، يتم افتراض التعريف الأول (class hello(object):
) والثاني (class hello():
) كنفس الشيء، حيث يرث الكلاس من الكلاس الأساسي “object” تلقائيًا. ومع ذلك، يفضل الكثيرون استخدام التعبير الكامل class hello(object):
للوضوح والقراءة الجيدة. بينما في Python 2، كان الفرق أكبر بين الطرق، حيث كان class hello:
يعني أن الكلاس لا يرث من “object”، بينما class hello(object):
يعني أنه يرث من “object”.
باختصار، استخدام self
في Python يساعد في تمييز متغيرات الكائنات الفردية داخل الكلاس، بينما تعريف الكلاس بوضوح يؤدي إلى قراءة الشيفرة بشكل أفضل وتوضيح العلاقات الوراثية في الكود.
المزيد من المعلومات
بالتأكيد، سنواصل توسيع المقال لفهم عميق لهذه المفاهيم.
إذا نظرنا إلى الكود الذي قدمته، يمكننا فهم كيفية عمل الكلاسات في Python ولماذا يعتبر استخدام “self” ضرورياً.
عندما تقوم بإنشاء كائن من الكلاس، مثل hh = ge(1, 2)
، يتم استدعاء دالة __init__
تلقائياً. هذه الدالة تستخدم لتهيئة الكائن، وتأخذ المعاملات التي تم تمريرها إليها عند إنشاء الكائن. في حالتك، فإنها تأخذ معاملين “a” و “b” وتضعهما في الخصائص “p” و “l” بالترتيب.
باستخدام الـ”self”، يمكنك الوصول إلى هذه الخصائص في أي دالة داخل الكلاس. على سبيل المثال، في دالة ff()
، تقوم بإنشاء متغير جديد “aaa” باستخدام قيمتي “p” و “l” المخزنة في الكائن الحالي. هذا يتيح لك استخدام البيانات التي تم تخزينها في الكائن بسهولة داخل الكلاس.
بالنسبة للفرق بين تعريف الكلاس بوجود معلمة وعدمها، يعتمد الأمر على الإصدار من Python الذي تستخدمه. في Python 3، لا يوجد فرق كبير بين تلك الطرق. ومع ذلك، في Python 2، كان هناك بعض الاختلافات في التصرف بين class hello:
و class hello(object):
. في الوقت الحالي، يُنصح بتحديد object
لضمان التوافق مع إصدارات Python المستقبلية ولتوضيح الرمز للقراء.
بشكل عام، فهم عمل الكلاسات في Python وكيفية استخدام “self” يعتبر أمرًا أساسيًا لتطوير تطبيقات Python متقدمة وفعّالة. من خلال تطبيق هذه المفاهيم، يمكنك كتابة كود أكثر قابلية للصيانة وفعالية، وتحسين قدرتك على بناء تطبيقات قوية ومرنة باستخدام Python.