فئات وكائنات بايثون - البرمجة الشيئية



تتناول هذه المدونة الخاصة بـ 'Python Class' أساسيات الفئة والسمة ومفاهيم OOPS المختلفة مثل الوراثة وتعدد الأشكال والتغليف.

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

هيا بنا نبدأ.:-)





ما هي فئة بايثون؟

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

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



  • متغير الفئة هو متغير تشترك فيه جميع الكائنات / الأمثلة المختلفة للفئة.
  • متغيرات سريعة هي متغيرات فريدة لكل حالة. يتم تعريفه داخل طريقة وينتمي فقط إلى المثيل الحالي للفئة.
  • طرق تسمى أيضًا وظائف يتم تعريفها في فئة وتصف سلوك كائن.

الآن ، دعونا نمضي قدمًا ونرى كيف يعمل في PyCharm. للبدء ، ألقِ نظرة أولاً على بنية فئة بيثون.

بناء الجملة :

فئة Class_name: بيان -1. . بيان- N

هنا ، ' صف دراسي' بيان يخلق تعريف فئة جديد. يتبع اسم الفصل الكلمة الأساسية ' صف دراسي' في python متبوعًا بنقطتين. لإنشاء فصل دراسي في بايثون ، ضع في اعتبارك المثال التالي:



موظف الفصل: اجتياز # لا سمات وطرق emp_1 = موظف () emp_2 = موظف () # متغير حالة يمكن إنشاؤه يدويًا emp_1.first = 'aayushi' emp_1.last = 'Johari' emp_1.email='aayushi@edureka.co 'emp_1.pay = 10000 emp_2.first =' test 'emp_2.last =' abc 'emp_2.email='test@company.com' emp_2.pay = 10000 طباعة (emp_1.email) طباعة (emp_2.email)

انتاج | -

aayushi@edureka.co test@company.com

الآن ، ماذا لو كنا لا نريد تعيين هذه المتغيرات يدويًا. سترى الكثير من التعليمات البرمجية وأيضًا أنها عرضة للخطأ. لذلك لجعلها تلقائية ، يمكننا استخدام طريقة 'init'. لذلك ، دعونا نفهم بالضبط ما هي الأساليب والسمات في فئة بيثون.

الأساليب والسمات في فئة بايثون

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

موظف فئة: def __init __ (self، first، last، sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' emp_1 = موظف ('aayushi'، 'johari'، 350000) emp_2 = موظف ('test'، 'test'، 100000) print (emp_1.email) print (emp_2.email)

الآن ضمن طريقة 'init' ، قمنا بتعيين متغيرات الحالة هذه (self ، first ، last ، sal). الذات هي المثال الذي يعني أنه عندما نكتب self.fname = أولًا ، فهي مماثلة لـ emp_1.first = 'aayushi'. ثم أنشأنا حالات لفئة الموظف حيث يمكننا تمرير القيم المحددة في طريقة init. هذه الطريقة تأخذ الأمثلة كوسيطات. بدلاً من القيام بذلك يدويًا ، سيتم القيام بذلك تلقائيا الآن.

فيبوناتشي في ++ c

بعد ذلك ، نريد القدرة على أداء نوع من العمل. لذلك ، سنضيف ملف طريقة لهذا الفصل. افترض أنني أريد أن تعرض الوظيفة الاسم الكامل للموظف. لذلك دعونا ننفذ هذا عمليا.

موظف فئة: def __init __ (self، first، last، sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' def fullname (self): return '{} {}'. format (self.fname، self.lname) emp_1 = الموظف ('aayushi'، 'johari'، 350000) emp_2 = الموظف ('test'، 'test'، 100000) print (emp_1.email) print (emp_2.email) print (emp_1.fullname ()) print (emp_2.fullname ())

انتاج |-

aayushi.johari@company.com test.test@company.com اختبار aayushijohari

كما ترى أعلاه ، لقد قمت بإنشاء طريقة تسمى 'الاسم الكامل' داخل الفصل. لذا فإن كل عملية داخل فئة python تأخذ المثيل تلقائيًا باعتباره الوسيطة الأولى. الآن ضمن هذه الطريقة ، قمت بكتابة المنطق لطباعة الاسم الكامل وإرجاع هذا بدلاً من emp_1 الاسم الأول واسم العائلة. بعد ذلك ، لقد استخدمت 'self' حتى تعمل مع جميع الحالات. لذلك لطباعة هذا في كل مرة ، نستخدم ملف طريقة .

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

موظف فئة: perc_raise = 1.05 def __init __ (self، first، last، sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' def fullname (self): إرجاع '{} {}'. format (self.fname، self.lname) def application_raise (self): self.sal = int (self.sal * 1.05 ) emp_1 = موظف ('aayushi'، 'johari'، 350000) emp_2 = موظف ('test'، 'test'، 100000) print (emp_1.sal) emp_1.apply_raise () print (emp_1.sal)

انتاج |-

350000 367500

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

السمات في فئة بايثون

تحدد السمات في Python خاصية كائن أو عنصر أو ملف. هناك نوعان من السمات:

  • سمات الفئة المضمنة: توجد العديد من السمات المضمنة داخل فئات بايثون. على سبيل المثال _dict_ ، _doc_ ، _name _ ، إلخ. دعني آخذ نفس المثال حيث أريد عرض جميع أزواج القيمة والمفتاح للموظف 1. لذلك ، يمكنك ببساطة كتابة العبارة التالية التي تحتوي على مساحة اسم الفئة:

    طباعة (emp_1 .__ ديكت__)

    بعد تنفيذه ، ستحصل على مخرجات مثل: {'fname': 'aayushi' ، 'lname': 'johari' ، 'sal': 350000 ، 'email': 'aayushi.johari@company.com'}

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

بعد ذلك ، لدينا عام ، محمي و نشر السمات. دعونا نفهمها بالتفصيل:

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


بعد ذلك ، دعنا نفهم العنصر الأكثر أهمية في فئة بيثون ، أي الكائنات.

ما هي الكائنات في فئة بايثون؟

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

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

class MyClass: def func (self): print ('Hello') # إنشاء MyClass جديد ob = MyClass () ob.func ()

كيفية إنشاء فصل دراسي فردي في جافا

المضي قدمًا في فصل بايثون ، دعنا نفهم مفاهيم OOPs المختلفة.

مفاهيم OOPs

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

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

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

كما نرى في الصورة ، يرث الطفل ممتلكات الأب. وبالمثل ، في Python ، هناك فئتان:

1. فئة الوالدين (الدرجة الممتازة أو الأساسية)

2. فئة فرعية (فئة فرعية أو فئة مشتقة)

تُعرف الفئة التي ترث الخصائص باسم طفل الفئة بينما تُعرف الفئة التي توارثت خصائصها باسم الأبوين صف دراسي.

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

دعنا نمضي قدمًا في فئة بيثون ونفهم كيف تكون الوراثة مفيدة.

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

موظف الفئة: عدد_الموظفين = 0 زيادة_المبلغ = 1.04 def __init __ (النفس ، الأول ، الأخير ، sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' worker.num_employee + = 1 def fullname (self): إرجاع '{} {}'. format (self.first، self.last) def application_raise (self): self.sal = int ( self.sal * lift_amount) مطور فئة (موظف): مرر emp_1 = مطور ('aayushi'، 'johari'، 1000000) print (emp_1.email)
 انتاج | - aayushi.johari@company.com

كما ترى في الإخراج أعلاه ، تتوفر جميع تفاصيل فئة الموظف في فئة المطور.الآن ماذا لو أردت تغيير مبلغ الزيادة لمطور إلى 10٪؟ دعونا نرى كيف يمكن القيام بذلك عمليا.

موظف الفئة: عدد_الموظفين = 0 زيادة_المبلغ = 1.04 def __init __ (النفس ، الأول ، الأخير ، sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' worker.num_employee + = 1 def fullname (self): إرجاع '{} {}'. format (self.first، self.last) def application_raise (self): self.sal = int ( self.sal * lift_amount) مطور فئة (موظف): lift_amount = 1.10 emp_1 = مطور ('aayushi'، 'johari'، 1000000) print (emp_1.raise_amount)
 انتاج | - 1.1

كما ترى أنه تم تحديث نسبة الزيادة في الراتب من 4٪ إلى 10٪.الآن ، إذا أردت إضافة سمة أخرى ، قل لغة برمجة في طريقة init ، لكنها غير موجودة في الفصل الرئيسي. هل هناك أي حل لذلك؟ نعم! يمكننا نسخ منطق الموظف بالكامل والقيام بذلك ولكنه سيزيد حجم الكود مرة أخرى. لتجنب ذلك ، دعنا نفكر في الكود أدناه:

خطة مراقبة ومراقبة المشروع
موظف الفئة: عدد_الموظفين = 0 زيادة_المبلغ = 1.04 def __init __ (النفس ، الأول ، الأخير ، sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' worker.num_employee + = 1 def fullname (self): إرجاع '{} {}'. format (self.first، self.last) def application_raise (self): self.sal = int ( self.sal * lift_amount) مطور فئة (موظف): lift_amount = 1.10 def __init __ (self، first، last، sal، prog_lang): super () .__ init __ (first، last، sal) self.prog_lang = prog_lang emp_1 = developer ( طباعة 'aayushi'، 'johari'، 1000000، 'python') (emp_1.prog_lang)

لذلك ، مع القليل من التعليمات البرمجية ، قمت بإجراء تغييرات. لقد استخدمت super .__ init __ (أولاً ، أخيرًا ، دفع) والتي ترث الخصائص من الفئة الأساسية.في الختام ، يتم استخدام الوراثة لإعادة استخدام الكود وتقليل تعقيد البرنامج.

فئة بايثون: تعدد الأشكال

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

دعونا نفهم بمثال:

class Animal: def __init __ (self، name): self.name = name def talk (self): pass class Dog (Animal): def talk (self): print ('Woof') class Cat (Animal): def talk ( self): print ('MEOW!') c = Cat ('kitty') c.talk () d = Dog (Animal) d.talk ()

انتاج -

مواء! اللحمة

بعد ذلك ، دعنا ننتقل إلى مفهوم برمجة آخر موجه للكائنات ، مثل التجريد.

فئة بايثون: التجريد

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

من abc import ABC ، ​​abstractmethod class Employee (ABC):abstractmethod def calculate_salary (self، sal): pass class Developer (Employee): def calculate_salary (self، sal): finalsalary = sal * 1.10 return finalalary emp_1 = Developer () print (emp_1.calculate_salary (10000))

انتاج |-

11000.0

كما ترون في الناتج أعلاه ، قمنا بزيادة الراتب الأساسي إلى 10٪ أي أن الراتب الآن 11000. الآن ، إذا واصلت فعلاً إنشاء كائن من فئة 'الموظف' ، فإنه يرميك بخطأ كما لم يفعل بيثون لا يسمح لك بإنشاء كائن من فئة مجردة. لكن باستخدام الوراثة ، يمكنك بالفعل وراثة الخصائص وتنفيذ المهام ذات الصلة.

إذن يا رفاق ، كان هذا كله يتعلق بفصول وأشياء بايثون باختصار. لقد قمنا بتغطية جميع أساسيات فئة Python والكائنات ومختلف المفاهيم الموجهة للكائنات في Python ، حتى تتمكن من البدء في التدريب الآن. أتمنى أن تستمتعوا يا رفاق بقراءة هذه المدونة على 'Python Class' وأن تكون واضحًا بشأن كل جانب من الجوانب التي ناقشتها أعلاه. بعد فصل بايثون ، سأخرج بمزيد من المدونات على بايثون لمكتبة ومصفوفة scikit Learn. ترقب!

لديك سؤال لنا؟ يرجى ذكر ذلك في قسم التعليقات في مدونة 'Python Class' وسنعاود الاتصال بك في أقرب وقت ممكن.

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