سلام عليكم شباب
شباب انا بحاول اتعلم oop في بايتون
حيت واجهتني مشكلة وهي انني
لم افهم وضيفة __init__
في كلاس
هل يستطيع احد ان يشرحها لي بليز
تسمى هذه الدالة المتفردة special method، وتسمى أيضًا الدالة المُهيئة initializer، وفي اللغات الأخرى تسمى constructor، إلا إن هناك اختلافات طفيفة بينهما.
وظيفتها بسيطة جدًا، في هذه الدالة تحدد ما هي المدخلات التي تريد للفئة class أن تأخذها. ولك أن تضع فيها القيم الثابتة إن أردت. سأعطيك مثالًا، ليتضح المقصود. سنبني حاسبة بسيطة تأخذ عدديين فقط، وتوفر لك عمليتين حسابيتين إما الجمع وإما الطرح. بسم الله:
class Calc:
def __init__(self, x, y): #حددنا هنا المدخلات التي تأخذها هذه الفئة وهي العددان x و y
self.x = x
self.y = y
def add(self): # هذه الدالة للقيام بعملية الجمع
return x + y
def sub(self): وهذه للطرح
return x - y
ijma3 = calc(3, 2).add() #سنحصل على القيمة 5
e6ra7 = calc(3, 2).sub() #سنحصل على القيمة 1
فكما ترى فوظيفة __init__ هي تحديد نوع المدخلات (والتي هي هنا x و y)، وحفظها في الفئة(class) حتى نستخدمهن في الدوال الأخرى.
اسألني إن أشكل عليك شيء ما، فأنا هنا.
ال __init__ هي ماجك مثود تخليك تعَّرف الداله جوه الكلاس مررة وحده بس...... يعني زي ما تقول كده
بتختصرلك تعريف الداله مليون مررة في البروجكت
يعني انت مثلا بتعمل مشروع لعبه عربيات ..... مثلا... اكيد هتحتاج لكل عربيه فانكشن علان طحتلها صفات و تفاعلات ... اهو الكلاس ده بقى هيساعدك عشان مطحتش مليون فانكشن و جواه ال__init__ عشان تساعدك برضه متعرفش الفانكشن دي عشروميت مررة جوه البروجكت
.... و برضه نصيحه هقولك عليها لوجه الله لو عايز ال oop من غير تعقيد و كلكعه روح لمستر ابراهيم عادل
على يوتيوب (اسم القناه octucode) او روح للابكيشن بتاعه ( الغيير مدفوع ) وبرضه اسمه نفس اسم القناه (ملحوظة ده مش اعلان ) المستر دة بيشرح بضمير فيستحق التقدير عشان كده بنصح بيه 😀
أخي انا لم اجرب هادا الكود ولاكن يمكن قيام بنفس الشيء بستخدام هادا الكود
صدقت، كل ما فعلتَ هو أن غيرتَ اسم __init__ إلى numbers ولكن المفهوم هو نفسه. إن سألتني لماذا هذا الاسم __init__ ، فسأقول لك: هذا ما تواضع عليه المبرمجون.
ميزة __init__ أنك تستطيع تمرير ما تريد باستدعاء اسم الكلاس فقط، حيث أن بايثون ستعلم أنك تقصد __init__.
Calc(3,4)
أما بطريقتك فستضطر إلى أن تكتب:
Calc().numbers(3,4)
التعليقات