دالة البناء __init__
نجعل الكائن يأخذ كل بياناته لحظة صنعه. ⏱ نحو 20 دقيقة.
- تشرح فائدة دالة البناء
__init__. - تكتب
__init__بمُعطيات وتحفظها فيself. - تستخدم الخصائص في دوال الكلاس.
- تضع الكائنات في قائمة وتمرّ عليها.
١مشكلة الخصائص المنسية
في الدرس السابق أضفنا الخصائص بعد صنع الكائن، سطرًا سطرًا. وإذا نسينا خاصية ظهر خطأ:
class Student: pass s = Student()s.name = "علي"print(s.name, s.mark)
الحل: نجعل الكائن يأخذ كل خصائصه لحظة صنعه، مثل بطاقة الطالب التي لا تُصرف إلا مكتملة.
٢دالة البناء __init__
__init__ دالة خاصة تُنفَّذ تلقائيًّا عند صنع كل كائن. نكتب فيها الخصائص، ونعطيها القيم بين قوسي الكلاس:
class Student: def __init__(self, name, mark): self.name = name self.mark = mark s = Student("سارة", 90)print(s.name, s.mark)
انتبه: قبل init وبعدها شرطتان سفليتان __، لا شرطة واحدة.
٣الخصائص مع الدوال
بعد أن تُحفظ الخصائص في self، تستطيع كل دوال الكلاس استخدامها:
class Student: def __init__(self, name, mark): self.name = name self.mark = mark def result(self): if self.mark >= 60: return "ناجح" return "راسب" def show(self): print(self.name, ":", self.mark, "-", self.result()) a = Student("علي", 75)b = Student("منى", 48)a.show()b.show()
٤قائمة من الكائنات
نستطيع وضع الكائنات في قائمة، والمرور عليها بحلقة كما تعلّمت:
class Product: def __init__(self, name, price): self.name = name self.price = price cart = [Product("قلم", 3), Product("دفتر", 7), Product("حقيبة", 45)]total = 0for p in cart: total += p.priceprint("الإجمالي:", total)
📎 للاستزادة (اختياري): قيمة ابتدائية ثابتة
بعض الخصائص لا تحتاج قيمة من الخارج، فنكتب قيمتها مباشرة داخل __init__:
class Account: def __init__(self, owner): self.owner = owner self.balance = 0 a = Account("خالد")print(a.owner, a.balance)
توقّع وتحقّق
متى تُنفَّذ __init__؟
def __init__(self, name, age): كيف نصنع الكائن؟
name و age فقط.أي سطر يحفظ الاسم في الكائن داخل __init__؟
self.الخاصية = القيمة.كم شرطة سفلية قبل init وبعدها؟
__init__الخلاصة
__init__تُنفَّذ تلقائيًّا عند صنع كل كائن.- نعطي القيم عند الصنع:
Student("سارة", 90) - داخل
__init__نحفظ القيم هكذا:self.name = name - كل دوال الكلاس تستطيع استخدام الخصائص عبر
self.
تحدٍّ برمجي: كلاس الكتاب
متوسطاكتب كلاسًا اسمه Book تأخذ دالة بنائه العنوان title وعدد الصفحات pages، وفيه دالة info تطبع العنوان وعدد الصفحات. اصنع كتابين واستدعِ info لكل منهما.
def __init__(self, title, pages):- احفظ القيمتين في self.
- دالة info تطبع: self.title و self.pages
ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:
class Book: def __init__(self, title, pages):
💡 تلميح 1
self.title = title💡 تلميح 2
b1 = Book("البرمجة", 120)حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
class Book: def __init__(self, title, pages): self.title = title self.pages = pages def info(self): print(self.title, self.pages) b1 = Book("البرمجة", 120)b2 = Book("الشبكات", 200)b1.info()b2.info()