ما هوا الفرق بين __init__ و method عادية داخل ال class

  • zixkhalid

سلام عليكم شباب

شباب انا بحاول اتعلم 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) حتى نستخدمهن في الدوال الأخرى.

اسألني إن أشكل عليك شيء ما، فأنا هنا.

وقعت في خطأ مطبعي، هي return self.x + self.y نسيت self وكذلك الحال مع الطرح self.x - self.y

وظيفة __init___ خاصة جدا في البايثون، وتقوم بعملية بناء الكائن عند إنشائه أول مرة، بمعنى ما هي الأشياء التي سيقوم الكلاس بعملها بمجرد إنشاء الكائن. 

1000programer أضف ردا

ال __init__ هي ماجك مثود تخليك تعَّرف الداله جوه الكلاس مررة وحده بس...... يعني زي ما تقول كده

بتختصرلك تعريف الداله مليون مررة في البروجكت

يعني انت مثلا بتعمل مشروع لعبه عربيات ..... مثلا... اكيد هتحتاج لكل عربيه فانكشن علان طحتلها صفات و تفاعلات ... اهو الكلاس ده بقى هيساعدك عشان مطحتش مليون فانكشن و جواه ال__init__ عشان تساعدك برضه متعرفش الفانكشن دي عشروميت مررة جوه البروجكت

.... و برضه نصيحه هقولك عليها لوجه الله لو عايز ال oop من غير تعقيد و كلكعه روح لمستر ابراهيم عادل

على يوتيوب (اسم القناه octucode) او روح للابكيشن بتاعه ( الغيير مدفوع ) وبرضه اسمه نفس اسم القناه (ملحوظة ده مش اعلان ) المستر دة بيشرح بضمير فيستحق التقدير عشان كده بنصح بيه 😀

-1

أخي انا لم اجرب هادا الكود ولاكن يمكن قيام بنفس الشيء بستخدام هادا الكود 

صدقت، كل ما فعلتَ هو أن غيرتَ اسم __init__ إلى numbers ولكن المفهوم هو نفسه. إن سألتني لماذا هذا الاسم __init__ ، فسأقول لك: هذا ما تواضع عليه المبرمجون.

ميزة __init__ أنك تستطيع تمرير ما تريد باستدعاء اسم الكلاس فقط، حيث أن بايثون ستعلم أنك تقصد __init__.

Calc(3,4)

أما بطريقتك فستضطر إلى أن تكتب:

Calc().numbers(3,4)

شكرا على مجهودك

يعني ده كود ما فيه ولا __init__ وعم يعمل كويس

حسوب I/O هو مجتمع عربي، رجاءً شارك باللغة العربية الفصحى فقط

اخي انا من دولة هجينة لا اتقنها جيدا اسف