دالة البناء (__init__)
جزء من قسم Object Oriented Programming في رحلة Python على Coddy — الدرس 7 من 64.
تُعد الدالة __init__ دالة خاصة تعمل تلقائياً عند إنشاء كائن جديد. وهي تقوم بتهيئة سمات الكائن.
إليك مثال على فئة (class) تحتوي على دالة بناء (constructor):
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breedتأخذ الطريقة __init__ معاملات وتعينها لسمات الكائن باستخدام self.
قم بإنشاء كائنات باستخدام المنشئ (constructor):
rex = Dog("Rex", "German Shepherd")
buddy = Dog("Buddy", "Golden Retriever")عندما تستدعي Dog("Rex", "German Shepherd")، يقوم Python تلقائياً باستدعاء __init__ ويمرر الوسائط.
الوصول إلى السمات التي تم تعيينها بواسطة المنشئ (constructor):
print(rex.name)
print(rex.breed)
print(buddy.name)
print(buddy.breed)المخرجات:
Rex
German Shepherd
Buddy
Golden Retrieverيمكنك أيضاً الحصول على منشئ (constructor) بقيم افتراضية:
class Cat:
def __init__(self, name, age=1):
self.name = name
self.age = age
# إنشاء قطط
fluffy = Cat("Fluffy", 3)
whiskers = Cat("Whiskers") # العمر الافتراضي هو 1
print(f"{fluffy.name} is {fluffy.age} years old")
print(f"{whiskers.name} is {whiskers.age} years old")المخرجات:
Fluffy is 3 years old
Whiskers is 1 years oldنقطة رئيسية: تضمن طريقة __init__ إعداد كل كائن (object) بشكل صحيح ببياناته الأولية عند إنشائه. فهي تغنيك عن تعيين الخصائص (attributes) يدويًا بعد إنشاء الكائن.
التحدي
سهللقد تم تزويدك بملفات Python (book.py و driver.py) لتنفيذ نظام إدارة كتب. في هذا التحدي، ستقوم بتعريف فئة Book في ملف واحد ليتم استيرادها واستخدامها في ملف آخر.
مهمتك هي:
- إكمال فئة
Bookفيbook.pyباستخدام طريقة__init__التي تقوم بتهيئة سماتtitleوauthorوpages - سيقوم ملف
driver.pyباستيراد واستخدام فئةBookالخاصة بك لإنشاء كائن كتاب لـ"Harry Potter"بواسطة"J.K. Rowling"مع400صفحة
اتبع تعليقات TODO المفصلة في book.py.
ورقة مرجعية
تُعد الدالة __init__ منشئًا (constructor) يتم تشغيله تلقائيًا عند إنشاء كائن جديد لتهيئة سماته:
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breedقم بإنشاء الكائنات عن طريق استدعاء الفئة (class) مع تمرير الوسائط:
rex = Dog("Rex", "German Shepherd")
print(rex.name) # Rex
print(rex.breed) # German Shepherdيمكن أن تحتوي المنشئات على قيم افتراضية للمعاملات (parameters):
class Cat:
def __init__(self, name, age=1):
self.name = name
self.age = age
fluffy = Cat("Fluffy", 3)
whiskers = Cat("Whiskers") # age defaults to 1جرّب بنفسك
# TODO: استيراد فئة Book من ملف book.py
# استخدم هذا التنسيق: from book import Book
# TODO: إنشاء كائن كتاب باسم 'my_book' بالقيم التالية:
# - العنوان: "Harry Potter"
# - المؤلف: "J.K. Rowling"
# - الصفحات: 400
# مثال: my_book = Book("Title", "Author", pages)
# طباعة تفاصيل الكتاب
# TODO: تأكد من تعريف my_book بشكل صحيح قبل تشغيل هذا السطر
print(f"'{my_book.title}' by {my_book.author}, {my_book.pages} pages")يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Object Oriented Programming
1أساسيات OOP
الملفات الخارجيةمقدمة في OOPClasses مقابل Objectsمعامل selfMethodsAttributesدالة البناء (__init__)مراجعة - آلة حاسبة بسيطة4الوراثة
الوراثة الأساسيةدالة ()superإعادة تعريف الدوال (Method Overriding)الوراثة المتعددةترتيب استدعاء الدوال (Method Resolution Order)مراجعة - هيكلية الموظفين5تعدد الأشكال
مراجعة إعادة تعريف الدوالمفهوم Duck Typingالأصناف والدوال المجردةتصميم الواجهاتملخص - حاسبة الأشكال