OOPs في بايثون – شرح 5 مفاهيم رئيسية للأطفال

This post is also available in: English (الإنجليزية)

Python هي لغة برمجة عالية المستوى مفسرة وموجهة للكائنات. هياكل البيانات المدمجة عالية المستوى ، جنبًا إلى جنب مع الكتابة الديناميكية والربط الديناميكي ، تجعلها جذابة للغاية لتطوير التطبيقات السريعة ولاستخدامها كلغة نصية أو لصقلربط المكونات الحالية.

OOPs في بايثون

Python هي لغة برمجة متعددة النماذج. يدعم الأساليب المختلفة. أحد الأساليب الشائعة لحل مشكلة البرمجة هو إنشاء كائنات. يُعرف هذا باسم البرمجة الشيئية (OOP). يركز مفهوم OOP في Python على إنشاء كود قابل لإعادة الاستخدام.

يُعرف هذا المفهوم باسم DRY (لا تكرر نفسك).

5 مفاهيم OOPs الرئيسية في بايثون

في Python ، يتبع مفهوم OOP بعض المبادئ الأساسية:

  • صف دراسي
  • موضوع
  • طريقة
  • ميراث
  • تعدد الأشكال

1. الطبقة

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

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

بعض النقاط في فئة بايثون هي:

  • يتم إنشاء الفئات بواسطة فئة الكلمات اclass.
  • السمات هي المتغيرات التي تنتمي إلى فئة.
  • تكون السمات عامة دائمًا ويمكن الوصول إليها باستخدام عامل تشغيل النقطة (.).

صياغة تعريف الفئة

class ClassName:

Statement-1

Statement-2

.

.

.

Statement-n

تحديد فئة

class Dog:attr1 = “mammal”attr2 = “dog”def fun(self):print(“I’m a”, self.attr1)print(“I’m a”, self.attr2)

2. الكائن

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

يتكون الكائن من:

  • الدولة: يتم تمثيلها بسمات الكائن. كما أنه يعكس خصائص الكائن.
  • السلوك: يتم تمثيله بطرق الكائن. كما أنه يعكس استجابة كائن لأشياء أخرى.
  • يعطي اسمًا فريدًا للكائن ويمكّن كائنًا واحدًا من التفاعل مع الكائنات الأخرى.

OOPs in Python

تحديد كائن

class Dog:attr1 = “mammal”attr2 = “dog”def fun(self):print(“I’m a”, self.attr1)print(“I’m a”, self.attr2)Rodger = Dog()print(Rodger.attr1)print(Rodger.attr2)Rodger.fun()

انتاج:

الحيوان الثديي

كلب

أنا من الثدييات

أنا كلب

ال self

  • يجب أن تحتوي طرق الفئة على معلمة أولى إضافية في تعريف الطريقة. لا نعطي قيمة لهذه المعلمة عندما نسمي الطريقة ، توفرها Python.
  • إذا كانت لدينا طريقة لا تأخذ أي حجج ، فلا يزال لديها حجة واحدة وهي الذات.
  • هذا مشابه لهذا المؤشر this ++C وهذا المرجع this Java.

_init_ طريقة

طريقة _init_ مماثلة للمُنشئين في ++C و Java. يتم استخدام المنشئات لتهيئة حالة الكائن. مثل الأساليب ، يحتوي المُنشئ أيضًا على عدد من العبارات التي يتم تنفيذها في وقت إنشاء الكائن. يتم تشغيله بمجرد بدء كائن من الفصل.

class Dog:def _init_(self, name):self.name = namedef say_hi(self)print(‘Hello, my name is’, self.name)d = Dog(‘Rodger’)d.say_hi()

انتاج:

Hello, my name is Rodger

3. الطريقة

تشبه الطريقة في Python إلى حد ما الوظيفة ، إلا أنها مرتبطة بكائن / فئة. تشبه الطريقة في Python الوظائف إلى حد كبير باستثناء الاختلافات الرئيسية التالية:

  • يتم استخدام الطريقة ضمنيًا لكائن يتم استدعاؤها من أجله.
  • هذه الطريقة يمكن الوصول إليها من خلال البيانات الموجودة داخل الفصل الدراسي.

هيكل الطريقة في بايثون

class class_name

def method_name():

Statement_1

Statement_2

.

.

Statement_n

class Dog:def _init_(self, name):self.name = namedef say_hi(self):print(‘Hello, my name is’, self.name)def walk():print(‘I can walk)d = Dog(‘Rodger’)d.say_hi()d.walk()

هنا ، say_hi وwalk هما طريقتان.

انتاج:

Hello, my name is Rodger

I can walk

4. الميراث

الوراثة هي قدرة فئة ما على اشتقاق أو وراثة الخصائص أو السمات من فئة أخرى. فوائد الميراث هي:

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

هناك نوعان من فئات الميراث:

  • فئة الأصل هي الفئة الموروثة منها ، وتسمى أيضًا الفئة الأساسية.
  • الفئة الفرعية هي الفئة التي ترث من فئة أخرى ، وتسمى أيضًا الفئة المشتقة.

قم بإنشاء فصل للوالدين

يمكن لأي فصل أن يكون فصلًا أصليًا ، لذا فإن بناء الجملة هو نفسه إنشاء أي فئة أخرى.

class Person:def _init_ (self, fname, lname):self.fname = fnameself.name = lnamedef printname(self):print(self.firstname, self.lastname)x = Person(“Kishore”, “Kumar)x.printname()

انتاج:

كيشور كومار

أنشئ صفًا تابعًا

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

class Student(Person):pass

ملاحظة: استخدم كلمة passالأساسية عندما لا تريد إضافة أي خصائص أو طرق أخرى إلى الفصل الدراسي.

عندما نستخدم فئة الطالب لإنشاء كائن ، ثم ننفذ طريقة printname (نظرًا لأن الفصل الدراسي يرث خصائص / سمات فئة الشخص).

x = Student(“Ravi”, “Sharma”)x.printname()

انتاج:

رافي شارما

إضافة وظيفة _init_ () إلى فئة الأطفال

يمكننا إضافة وظيفة _init_ () إلى فئة الطفل (بدلاً من كلمة pass).

يتم استدعاء الدالة _init_ () تلقائيًا في كل مرة يتم فيها استخدام الفئة لإنشاء كائن جديد.

class Student(Person):def _init_(self, fname, lname):def funtion_1():..def function_n():

عند إضافة دالة _init_ () ، لن ترث الفئة الفرعية وظيفة الفئة الأصل _init_ () بعد الآن. للحفاظ على وراثة وظيفة _init_ () الخاصة بالوالدين ، أضف استدعاءًا لوظيفة الأبوين _init_ ().

class Student(Person):def _init_(self, fname, name):Person._init_(self, fname, name)

Super() وظيفة

لدى Python أيضًا وظيفة super () تجعل الفئة الفرعية ترث جميع الأساليب والخصائص من الأصل.

class Student(Person):def _init_(self, fname, name):super()._init_(fname, name)

باستخدام وظيفة super () ، لن تضطر إلى استخدام اسم الفئة الأصلية ، فسوف ترث تلقائيًا الأساليب والخصائص من الأصل. يمكنك إضافة خصائص / سمات إضافية إلى فئة الأطفال.

سيضيف الكود التالي خاصية تسمى graduationyear إلى فصلالطالب:

class Student(Person):def _init_(self, fname, lname):super()._init_(fname, name)self.graduationyear = 2019

5. تعدد الأشكال

تعني كلمة تعدد الأشكال وجود العديد من الأشكال. في البرمجة ، تعني تعدد الأشكال نفس اسم الوظيفة (ولكن تؤدي أنشطة مختلفة). يمكن تنفيذ تعدد الأشكال في Python بأي من الطرق التالية:

  • تعدد الأشكال مع طرق الفصل
  • تعدد الأشكال مع الميراث

تعدد الأشكال مع طرق الفصل

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

class India():def continent(self):print(“India is in Asia.”)def capital(self):print(“Capital of India is New Delhi.”)def language(self):print(“Hindi is the most widely spoken language in India.”)class USA():def continent(self):print(“The USA is in North America.”)def capital(self):print(“Capital of the USA is Washington DC.”)def language(self):print(“English is the most widely spoken language in the USA.”)obj_ind = India()obj_usa = USA()For country in(obj_ind, obj_usa):country.continent()country.capital()country.language()

انتاج:

India is in Asia.

Capital of India is New Delhi.

Hindi is the most widely spoken language in India.

The USA is in North America.

Capital of the USA is Washington DC.

English is the most widely spoken language in the USA.

تعدد الأشكال مع الوراثة

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

يشرح الكود التالي المفهوم:

class Bird:def intro(self):printf(“There are many types of birds.”)def flight(self):print(“Most of the birds can fly but some cannot.”)class sparrow(Bird):def flight(self):print(“Sparrows can fly.”)class ostrich(Bird):def flight(self):print(“Ostrich cannot fly.”)obj_bird = Bird()obj_spr = sparrow()obj_ost = ostrich()obj_bird.intro()obj_bird.flight()obj_spr.intro()obj_spr.flight()obj_ost.intro()obj_ost.flight()

انتاج:

There are many types of birds.

Most of the birds can fly but some cannot.

There are many types of birds.

Sparrows can fly.

There are many types of birds.

Ostrich cannot fly.

أضف تعليق