البرمجة

إنشاء الأصناف والكائنات في بايثون

كيفية إنشاء الأصناف وتعريف الكائنات في بايثون 3

تُعتبر البرمجة الشيئية أحد الأساليب الأساسية في تطوير البرمجيات الحديثة، والتي توفر طريقة مرنة ومنهجية لتنظيم الكود وتحسين قابليته للتوسع. في لغة بايثون 3، يُعتبر مفهوم الأصناف (Classes) والكائنات (Objects) حجر الزاوية في هذا النمط البرمجي. باستخدام هذه المفاهيم، يمكن للمبرمجين إنشاء تطبيقات مرنة وقابلة للتطوير، مما يجعل البرمجة أسهل وأكثر فعالية.

في هذا المقال، سوف نتناول كيفية إنشاء الأصناف وتعريف الكائنات في بايثون 3 بشكل مفصل، موضحين المفاهيم الأساسية المتعلقة بهذا الموضوع مثل الفئات (classes)، الكائنات (objects)، والطرق (methods)، وكذلك كيفية استخدام الوراثة (inheritance)، التغليف (encapsulation)، والتعددية (polymorphism) ضمن لغة بايثون.

ما هي الأصناف (Classes) في بايثون؟

في بايثون، الفئة (أو الصنف) هي قالب أو هيكل يُستخدم لإنشاء الكائنات. يمكن اعتبار الفئة كخطة أو تصميم للكائنات التي سيتم إنشاؤها، حيث تحدد البيانات (المتغيرات) والوظائف (الطرق) التي يمكن أن يتعامل معها الكائن. الفئات تشبه القوالب التي تُستخدم لبناء كائنات متعددة بناءً على نفس المواصفات.

على سبيل المثال، إذا أردنا إنشاء فئة تمثل “السيارة”، يمكن أن تحتوي الفئة على متغيرات تمثل خصائص السيارة مثل اللون والعلامة التجارية، وطرق تمثل سلوكيات السيارة مثل التشغيل أو الإيقاف.

إنشاء الفئة في بايثون

في بايثون، يتم إنشاء الفئات باستخدام الكلمة المفتاحية class تليها اسم الفئة. إليك كيفية إنشاء فئة بسيطة لتمثيل سيارة:

python
class Car: # مُهيئ الصنف (Constructor) def __init__(self, brand, color): self.brand = brand self.color = color # طريقة (Method) لعرض معلومات السيارة def display_info(self): print(f"This is a {self.color} {self.brand}.")

في الكود السابق، قمنا بتعريف فئة باسم Car تحتوي على:

  1. مُهيئ الصنف (__init__): هو دالة خاصة تُستخدم لإنشاء الكائنات (objects) وتهيئة خصائصها.

  2. الخصائص (self.brand, self.color): هي المتغيرات التي تخزن بيانات الكائن.

  3. الطرق (display_info): هي الوظائف أو الإجراءات التي يمكن للكائن أن يقوم بها.

تعريف الكائنات (Objects)

الكائن هو نسخة من الفئة (class)، ويمكن لكل كائن أن يحتوي على قيم مختلفة للخصائص المحددة في الفئة. لإنشاء كائن من فئة معينة، نستخدم اسم الفئة كدالة. عندما يتم إنشاء كائن، يتم تنفيذ المُهيئ (__init__) تلقائيًا.

على سبيل المثال، لإنشاء كائن من فئة Car:

python
# إنشاء كائن جديد من الفئة Car my_car = Car("Toyota", "red") # استخدام الطريقة display_info my_car.display_info()

الناتج سيكون:

csharp
This is a red Toyota.

هنا، قمنا بإنشاء كائن باسم my_car باستخدام الفئة Car، وأعطيناه قيمًا خاصة به للخصائص brand و color.

المتغيرات والمصفوفات في الأصناف

تُستخدم المتغيرات في الفئات لتخزين البيانات المتعلقة بكل كائن. يمكن أن تكون هذه المتغيرات من أي نوع بيانات مدعوم في بايثون. في المثال السابق، استخدمنا brand و color كمتغيرات للفئة. أيضًا يمكن تخزين بيانات في مصفوفات أو قوائم ضمن الفئة لتخزين مجموعات من البيانات.

python
class Person: def __init__(self, name, age): self.name = name self.age = age self.hobbies = [] # مصفوفة لتخزين الهوايات def add_hobby(self, hobby): self.hobbies.append(hobby) def display_info(self): print(f"Name: {self.name}, Age: {self.age}") print("Hobbies:", ", ".join(self.hobbies)) # إنشاء كائن جديد person = Person("John", 30) person.add_hobby("Reading") person.add_hobby("Traveling") person.display_info()

الناتج سيكون:

yaml
Name: John, Age: 30 Hobbies: Reading, Traveling

الوراثة في بايثون

الوراثة هي ميزة من ميزات البرمجة الشيئية تسمح بإنشاء فئات جديدة من فئات موجودة بالفعل. الفئة الجديدة (المشتقة) يمكن أن تحتوي على خصائص وطرق الفئة الأساسية (الوالدة)، بالإضافة إلى إمكانية إضافة خصائص وطرق جديدة.

إليك كيفية استخدام الوراثة في بايثون:

python
class Animal: def __init__(self, name): self.name = name def speak(self): print(f"{self.name} makes a sound.") # فئة مشتقة من Animal class Dog(Animal): def __init__(self, name, breed): super().__init__(name) # استدعاء مُهيئ الفئة الأم self.breed = breed def speak(self): print(f"{self.name} barks.") # إنشاء كائن من الفئة المشتقة dog = Dog("Buddy", "Golden Retriever") dog.speak()

الناتج سيكون:

nginx
Buddy barks.

في هذا المثال، قامت الفئة Dog بالوراثة من الفئة Animal وأعادت تعريف طريقة speak لتناسب سلوك الكلب.

التغليف في بايثون

التغليف هو ميزة أخرى من ميزات البرمجة الشيئية التي تعني إخفاء التفاصيل الداخلية للفئة عن المستخدم. في بايثون، يتم تحقيق التغليف باستخدام الطرق الخاصة (private methods) والخصائص الخاصة (private attributes).

يتم تمييز الخصائص والطرق الخاصة باستخدام سطر تحتاني (underscore) في بايثون. عندما تبدأ خاصية أو طريقة باسم _، فهذا يعني أنها خاصة ويجب ألا تُستخدم مباشرة من الخارج. إذا كان الاسم يبدأ بـ __ (سطر تحتاني مزدوج)، فهذا يشير إلى أنه خاص جدًا ويجب تجنب الوصول إليه مباشرة.

python
class BankAccount: def __init__(self, balance): self.__balance = balance # خاصية خاصة def deposit(self, amount): self.__balance += amount def get_balance(self): return self.__balance # إنشاء كائن من الفئة account = BankAccount(1000) account.deposit(500) print(account.get_balance()) # سيتمكن المستخدم من الوصول إلى الرصيد باستخدام دالة get_balance

الناتج سيكون:

yaml
1500

في هذا المثال، تُخزن قيمة الرصيد في خاصية __balance التي لا يمكن الوصول إليها مباشرة من خارج الفئة، مما يوفر حماية للبيانات من التغيير غير المصرح به.

التعددية في بايثون

التعددية هي القدرة على استخدام نفس الاسم للعديد من الأغراض المختلفة. في بايثون، يمكن أن يكون للتعددية نوعين رئيسيين: التعددية في الدوال (Method Overloading) والتعددية في التوريث (Method Overriding).

  1. التعددية في الدوال:
    بايثون لا يدعم التعددية في الدوال بالطريقة التي تفعلها بعض لغات البرمجة الأخرى. ومع ذلك، يمكن محاكاة التعددية باستخدام *args و **kwargs لاستقبال عدد غير محدد من المعاملات.

python
class Calculator: def add(self, *args): return sum(args) calc = Calculator() print(calc.add(1, 2, 3, 4)) # النتيجة هي 10
  1. التعددية في التوريث:
    التعددية في التوريث تحدث عندما تقوم الفئة المشتقة بتعديل أو تغيير سلوك طريقة موروثة من الفئة الأم.

python
class Animal: def speak(self): print("Animal makes a sound.") class Cat(Animal): def speak(self): print("Meow") class Dog(Animal): def speak(self): print("Woof") # إنشاء كائنات واستخدام التعددية animals = [Cat(), Dog()] for animal in animals: animal.speak()

الناتج سيكون:

nginx
Meow Woof

الخلاصة

لقد تناولنا في هذا المقال كيفية إنشاء الأصناف وتعريف الكائنات في بايثون 3 بشكل شامل. تعلمنا كيفية إنشاء الأصناف باستخدام الكلمة المفتاحية class، كيفية إنشاء الكائنات من هذه الأصناف، وكيفية العمل مع المتغيرات والطرق داخل الفئات. كما استعرضنا بعض المفاهيم المتقدمة مثل الوراثة، التغليف، والتعددية، التي تعد من الأسس الهامة في البرمجة الشيئية.