إنشاء الفئات (Classes) والكائنات (Objects) خطوة بخطوة
أهلاً بكم في هذا الدرس الاحترافي! اليوم سنتعلم كيفية بناء أساسيات البرمجة الكائنية (OOP) في بايثون من خلال إنشاء الفئات والكائنات.
سنقوم بتصميم فئة بسيطة تمثل "كتاب" (Book) وننشئ منها كائنات متعددة.
الخطوة 1: تعريف الفئة الأساسية (Class Definition)
نبدأ بتعريف الفئة Book. الفئة هي مخطط لإنشاء الكائنات. في هذه المرحلة، ستكون الفئة فارغة تقريباً، لكنها تمثل الأساس.
الكلمة المفتاحية class تستخدم لتعريف فئة جديدة. الاسم الأول للفئة يفضل أن يبدأ بحرف كبير (PascalCase) لتمييزها عن المتغيرات والدوال.
class Book:
# هذه فئة بسيطة تمثل كتاباً
pass
في هذا الكود، pass هي كلمة مفتاحية تعني "لا تفعل شيئاً". نستخدمها لجعل الفئة صالحة بناءً على قواعد بناء الجملة حتى نتمكن من إضافة المزيد لاحقاً.
الخطوة 2: إضافة خصائص (Attributes) باستخدام الدالة البانية (__init__)
لكي يكون الكتاب مفيداً، يجب أن يحتوي على خصائص مثل العنوان والمؤلف وسنة النشر. نستخدم الدالة البانية __init__ لتهيئة هذه الخصائص عند إنشاء كائن جديد.
الدالة__init__هي دالة خاصة تُستدعى تلقائياً عند إنشاء كائن جديد من الفئة. أول وسيط لها دائماً هوself، والذي يشير إلى الكائن الذي يتم إنشاؤه.
class Book:
def __init__(self, title, author, publication_year):
# الدالة البانية لتهيئة خصائص الكتاب
self.title = title # تعيين العنوان كخاصية للكائن
self.author = author # تعيين المؤلف كخاصية للكائن
self.publication_year = publication_year # تعيين سنة النشر كخاصية للكائن
الآن، عند إنشاء كائن Book، يجب أن نمرر له العنوان والمؤلف وسنة النشر. هذه القيم ستُخزن كخصائص خاصة بذلك الكائن.
الخطوة 3: إضافة سلوك (Methods) للفئة
الفئات لا تحتوي على خصائص فقط، بل يمكن أن تحتوي أيضاً على دوال (تسمى "methods" داخل الفئات) تحدد سلوك الكائنات. لنضف دالة لعرض تفاصيل الكتاب.
الدوال داخل الفئة (Methods) تعمل على بيانات الكائن (خصائصه). يجب أن تأخذ self كوسيط أول للوصول إلى خصائص الكائن.
class Book:
def __init__(self, title, author, publication_year):
self.title = title
self.author = author
self.publication_year = publication_year
def display_info(self):
# دالة لعرض معلومات الكتاب
print(f"العنوان: {self.title}")
print(f"المؤلف: {self.author}")
print(f"سنة النشر: {self.publication_year}")
الآن، كل كائن Book سيكون لديه القدرة على طباعة معلوماته الخاصة باستخدام الدالة display_info().
الخطوة 4: إنشاء الكائنات (Objects) واستخدامها
بعد تعريف الفئة بكل خصائصها وسلوكياتها، يمكننا الآن إنشاء كائنات متعددة منها. كل كائن سيكون نسخة مستقلة من الفئة Book.
إنشاء الكائنات (Instantiation) يتم باستدعاء اسم الفئة كدالة، وتمرير القيم المطلوبة للدالة البانية __init__.
# تعريف الفئة (كما في الخطوات السابقة)
class Book:
def __init__(self, title, author, publication_year):
self.title = title
self.author = author
self.publication_year = publication_year
def display_info(self):
print(f"العنوان: {self.title}")
print(f"المؤلف: {self.author}")
print(f"سنة النشر: {self.publication_year}")
# إنشاء كائنات من الفئة Book
book1 = Book("مقدمة في بايثون", "أحمد علي", 2023) # إنشاء الكائن الأول
book2 = Book("هندسة البرمجيات للمبتدئين", "سارة محمود", 2021) # إنشاء الكائن الثاني
# استخدام خصائص وسلوكيات الكائنات
print("معلومات الكتاب الأول:")
book1.display_info() # استدعاء دالة عرض المعلومات للكائن الأول
print("\nمعلومات الكتاب الثاني:")
book2.display_info() # استدعاء دالة عرض المعلومات للكائن الثاني
# الوصول المباشر للخصائص (اختياري)
print(f"\nعنوان الكتاب الأول (وصول مباشر): {book1.title}")
في هذه الخطوة، قمنا بإنشاء كائنين (book1 و book2) وكل منهما يمثل كتاباً مختلفاً بخصائصه الفريدة. ثم استخدمنا الدالة display_info لكل كائن لطباعة معلوماته.
الكود النهائي الكامل
هذا هو السكربت كاملاً، جاهز للنسخ والتشغيل:
class Book:
"""
فئة تمثل كتاباً بخصائص مثل العنوان، المؤلف، وسنة النشر.
"""
def __init__(self, title, author, publication_year):
"""
الدالة البانية لتهيئة كائن جديد من Book.
:param title: عنوان الكتاب.
:param author: مؤلف الكتاب.
:param publication_year: سنة نشر الكتاب.
"""
self.title = title # تعيين العنوان كخاصية للكائن
self.author = author # تعيين المؤلف كخاصية للكائن
self.publication_year = publication_year # تعيين سنة النشر كخاصية للكائن
def display_info(self):
"""
دالة لعرض جميع معلومات الكتاب بشكل منسق.
"""
print(f"العنوان: {self.title}")
print(f"المؤلف: {self.author}")
print(f"سنة النشر: {self.publication_year}")
# إنشاء كائنات من الفئة Book
book1 = Book("مقدمة في بايثون", "أحمد علي", 2023)
book2 = Book("هندسة البرمجيات للمبتدئين", "سارة محمود", 2021)
book3 = Book("تصميم واجهات المستخدم", "خالد فهد", 2024)
# استخدام خصائص وسلوكيات الكائنات
print("--- معلومات الكتاب الأول ---")
book1.display_info()
print("\n--- معلومات الكتاب الثاني ---")
book2.display_info()
print("\n--- معلومات الكتاب الثالث ---")
book3.display_info()
# يمكننا أيضاً تحديث خصائص الكائن بعد إنشائه
book1.publication_year = 2024
print("\n--- معلومات الكتاب الأول بعد التحديث ---")
book1.display_info()
النتيجة المتوقعة
عند تشغيل السكربت أعلاه، ستحصل على المخرجات التالية في الطرفية (console):
--- معلومات الكتاب الأول ---
العنوان: مقدمة في بايثون
المؤلف: أحمد علي
سنة النشر: 2023
--- معلومات الكتاب الثاني ---
العنوان: هندسة البرمجيات للمبتدئين
المؤلف: سارة محمود
سنة النشر: 2021
--- معلومات الكتاب الثالث ---
العنوان: تصميم واجهات المستخدم
المؤلف: خالد فهد
سنة النشر: 2024
--- معلومات الكتاب الأول بعد التحديث ---
العنوان: مقدمة في بايثون
المؤلف: أحمد علي
سنة النشر: 2024
هذا يوضح كيف يمكنك إنشاء كائنات متعددة من فئة واحدة، وكل كائن يحافظ على حالته (خصائصه) الخاصة، وكيف يمكن التفاعل معها وتحديثها.