English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا المقال، ستعرف من خلال الأمثلة على برمجة الكائنات (OOP) في بايثون ومفاهيمها الأساسية.
بايثون هو لغة برمجة متعددة الأنماط. يعني أنة يدعم طرق برمجة مختلفة.
من الطرق الشائعة لحل مشاكل البرمجة إنشاء الكائنات. وهي تُعرف أيضًا ببرمجة الكائنات (OOP).
يملك الكائن سمتين:
الخصائص
السلوك
دعونا نأخذ مثالاً:
الطائر هو كائن،
الاسم، العمر، اللون هي خصائص
الغناء، الرقص هما سلوكيات
مفهوم OOP في بايثون يركز على إنشاء كود قابل للإعادة الاستخدام. هذا المفهوم يُسمى أيضًا DRY (Don't Repeat Yourself) لا تكرر نفسك.
في بايثون، مفهوم OOP يتبع بعض المبادئ الأساسية:
الوراثة | استخدام تفاصيل الفئة الجديدة دون تعديل الفئة الحالية. |
الغشاء | إخفاء التفاصيل الخاصة للفئة عن الكائنات الأخرى. |
التعريف المتعدد | مفهوم استخدام العمليات العامة بشكل مختلف بناءً على المدخلات المختلفة. |
الفئة هي مخطط الكائن.
يمكننا رؤية الفئة كرسمة بسيطة للطائر المزين. إنه يحتوي على جميع التفاصيل المتعلقة بالاسم، اللون، الحجم، إلخ. بناءً على هذه التوصيفات، يمكننا دراسة الطائر. في هذا السياق، الطائر هو كائن.
مثال على فئة الطائر يمكن أن يكون:
class Parrot: pass
في هذا السياق، نستخدم كلمة المفتاح class لتعريف فئة فارغة Parrot. نحن نقوم ببناء مثال من الفئة. المثال هو كائن معين يتم إنشاؤه بواسطة فئة معينة.
الكائن (مثال) هو مثال على الفئة. عند تعريف الفئة، يتم تعريف وصف الكائن فقط. لذلك، لا يتم تخصيص ذاكرة أو تخزين.
مثال على كائن من فئة الطائر يمكن أن يكون:
obj = Parrot()
في هذا السياق، obj هو كائن من الفئة Parrot.
لنفترض أن لدينا تفاصيل طائر الطائر. سنجد فيما يلي كيفية بناء فئة الطائر وكائن.
class Parrot: # خصائص الفئة النوع = "طائر" # خصائص مثالية def __init__(self, name, age): self.name = name self.age = age # مثال على فئة Parrot blu = Parrot("الطائر الصغير", 10) woo = Parrot("الطائر الديك", 15) # الوصول إلى خصائص الكلاسس print("الطائر الصغير هو {}".format(blu.__class__.species)) print("الطائر الديك هو {}".format(woo.__class__.species)) # الوصول إلى خصائص الأمثلة print("{} يبلغ من العمر {} سنة".format(blu.name, blu.age)) print("{} يبلغ من العمر {} سنة".format(woo.name, woo.age))
عندما نستخدم البرنامج، الناتج سيكون:
الطائر الصغير هو طائر الطائر الديك هو طائر الطائر الصغير يبلغ من العمر 10 سنة الطائر الديك يبلغ من العمر 15 سنة
في البرنامج المسبق، قمنا بإنشاء كائن يُدعىParrotالكلاس. ثم، نحدد الخصائص. الخصائص هي خصائص الكائن.
ثم، نخلقParrotأمثلة الكلاسس. هنا،bluوwooهي مرجع لعدة كائنات جديدة (القيمة).
ثم، نستخدم class .species لاستدعاء خصائص الكلاسس. الخصائص الكلاسيكية المشتركة لجميع أمثلة الكلاسس هي نفسها. وبالمثل، نستخدم blu.name و blu.age لاستدعاء خصائص الأمثلة. ولكن، تكون الخصائص المختلفة للكل مثال منفرد.
للحصول على معلومات إضافية حول الكائنات والكلاسات، يرجى الانتقال إلىكائنات و كلاسات Python.
الطرق هي دوال يتم تعريفها داخل جسم الكائن. وتستخدم لتحديد سلوك الكائن.
class Parrot: # خصائص مثالية def __init__(self, name, age): self.name = name self.age = age # طرق مثالية def sing(self, song): return "{} يغني {}".format(self.name, song) def dance(self): return "{} الآن يرقص".format(self.name) # تعريف الكائن المثالي blu = Parrot("Blu", 10) # دعوة الطرق المثالية print(blu.sing("'Happy'")) print(blu.dance())
عندما نستخدم البرنامج، الناتج سيكون:
Blu يغني 'Happy' Blu يرقص الآن
في البرنامج المسبق، قمنا بتعريف طريقتين، هما sing() و dance()، وتسمى هاتان الطرق مثالية لأنها يتم استدعاؤها على الكائن المثالي (i.e. blu).
النسب هي طريقة لإنشاء فئة جديدة باستخدام فئة موجودة دون تعديل تفاصيلها. الفئة الجديدة هي فئة ناتجة (أو فئة فرعية). وبالمثل، الفئة الموجودة هي فئة أساسية (أو فئة أصلية).
# فئة أصلية class Bird: def __init__(self): print("الطائر مستعد") def whoisThis(self): print("الطائر") def swim(self): print("يغوص أسرع") # فئة فرعية class Penguin(Bird): def __init__(self): # استدعاء وظيفة super() super().__init__() print("الطريق مستعد") def whoisThis(self): print("الطريق") def run(self): print("يركض أسرع") peggy = Penguin() peggy.whoisThis() peggy.swim() peggy.run()
عندما نبدأ البرنامج، الناتج سيكون:
الطائر مستعد الطريق مستعد الطريق يغوص أسرع يركض أسرع
في البرنامج السابق، قمنا بإنشاء فئتين، وهيطائر(الفئة الأصلية) وPenguin(الفئة الفرعية). تنقل الفئة الفرعية وظائف الفئة الأصلية. يمكننا رؤية ذلك من طريقة swim(). الفئة الفرعية تعدل سلوك الفئة الأصلية مرة أخرى. يمكننا رؤية ذلك من طريقة whoisThis(). إضافةً إلى ذلك، نوسع وظيفة run() من الفئة الأصلية.
إضافةً إلى ذلك، نستخدم وظيفة super() قبل دالة init(). هذا بسبب أننا نريد سحب محتويات دالة init() من الفئة الأصلية إلى الفئة الفرعية.
في بايثون، باستخدام OOP، يمكننا تقييد الوصول إلى الطرق والمتغيرات. يمكن هذا من منع تعديل البيانات بشكل مباشر (يُسمى التجميع). في بايثون، نستخدم شرطية النشر كحرف مقدم لتمييز الخاصيات المُقيدة، أي "_" أو "__".
class Computer: def __init__(self): self.__maxprice = 900 def sell(self): print("السعر: {}".format(self.__maxprice)) def setMaxPrice(self, price): self.__maxprice = price c = Computer() c.sell() # تغيير السعر c.__maxprice = 1000 c.sell() # استخدام وظيفة المsetter c.setMaxPrice(1000) c.sell()
عندما نبدأ البرنامج، الناتج سيكون:
السعر: 900 السعر: 900 السعر: 1000
في البرنامج أعلاه، قمنا بتعريف الكلاسComputerفئة. نستخدم طريقة __init__() لتخزين أعلى سعر لجهاز الكمبيوتر. نحاول تعديل السعر. ولكن، لا يمكننا تعديله لأن بيانثون__maxpriceكخصائص خاصة. لتغيير القيمة، نستخدم وظيفة المزود، وهي fung_setMaxPrice()، التي تأخذ fung كمعامل.
التعددية هي وظيفة (في OOP) يمكن استخدام واجهة عامة لعدة أشكال (أنواع بيانات).
لنفترض أننا نحتاج إلى تلوين شكل، هناك خيارات متعددة للشكل (مثلث، مربع، دائرة). ولكن، يمكننا استخدام نفس الطريقة لتلوين أي شكل. هذه الفكرة تسمى التعددية.
class Parrot: def fly(self): print("الطائر العنز يطير") def swim(self): print("الطائر العنز لا يسبح") class Penguin: def fly(self): print("الطائر الديك لا يطير") def swim(self): print("الطائر الديك يسبح") # واجهة عامة def flying_test(bird): bird.fly() # تجسيد العنصر blu = Parrot() peggy = Penguin() # نقل العنصر flying_test(blu) flying_test(peggy)
عندما نن�行 البرنامج أعلاه، الناتج سيكون:
الطائر العنز يطير الطائر الديك لا يطير
في البرنامج أعلاه، قمنا بتعريف كلا من الصنفينParrotوPenguin. كل منهما يمتلك طريقة fly() عامة. ولكن، وظائفها مختلفة. من أجل السماح بالتعددية، قمنا بإنشاء واجهة عامة، وهي أن fung_test() يمكن أن تأخذ أي وظيفة. ثم، نقلنا fung_test() إلى وظيفة fung_test().bluوpeggyالعدة، التي تعمل بشكل فعال.
جعل البرمجة بسيطة ومثمرة.
الصنف قابل للتنسيق، لذا يمكن تكرار استخدام الكود.
زيادة إنتاجية مبرمجي البرمجة
من خلال التعبير عن البيانات بشكل抽象، تكون البيانات آمنة.