أحد المفاهيم الأكثر تعقيدًا التي تدور حولك كمبرمج جديد هي الفئات والكائنات. بمجرد أن تعرف كيفية استخدام الفئات في Python ، ستكون جاهزًا لإنشاء كود أكثر قوة وتعقيدًا بشكل ملحوظ.
المحتويات
تقديم دروس في بايثون
بالنسبة لأولئك الذين ليسوا على دراية بمفهوم الفصول الدراسية والذين يرغبون في معرفة المزيد عن كيفية عملهم ، استمر في القراءة. إذا كنت تريد فقط بناء الجملة للفئات في Python ، فيمكنك التخطي إلى القسم التالي!
إذن ، ما هو الفصل؟ الفئة هي جزء من التعليمات البرمجية التي تصف “كائن بيانات”. هذا كائن تمامًا كما تجده في العالم الحقيقي ، باستثناء أنه ليس له حضور ملموس: إنه موجود فقط في المفهوم!
مثل الكائنات الحقيقية ، يمكن أن يكون لكائنات البيانات خصائص (الحجم والوزن والطول وعدد الأرواح والسرعة) ، ويمكن أن يكون لها وظائف (التحرك للأمام ، والقفز ، ورفع الحرارة ، والحذف).
في لعبة الكمبيوتر ، على سبيل المثال ، يمكن وصف الرجل السيئ في الكود بأنه كائن بيانات. هذا من شأنه أن يتتبع مدى صحة الرجل السيئ ، وأين كانت فيما يتعلق باللاعب ، ومدى عدوانيته. يمكننا بعد ذلك استدعاء وظيفة “إطلاق النار” لشخص سيء لإطلاق المقذوفات ، أو وظيفة “التدمير” لإزالتها من اللعبة.
(باستثناء أننا نطلق على الوظائف اسم “طرق” عندما تظهر داخل الفئات في Python!)
يمكنك بعد ذلك ببساطة استخدام إجراءات الرسومات الخاصة بك لجذب هؤلاء الأشرار إلى الشاشة ، بناءً على المعلومات المقدمة من الفصل.
متى تستخدم فئات بايثون
إذا كنت تعرف كيفية استخدام المتغيرات في Python ، فهذا يعمل بشكل مشابه: باستثناء أنه بدلاً من تخزين قطعة واحدة من البيانات كعدد صحيح ، فأنت تقوم بتخزين معلومات مخصصة حول كائن تصوره.
اقرأ أيضًا: كيفية استخدام الجمل في بايثون
إن الشيء العظيم في الفصول في بايثون ، هو أنها تستطيع إنشاء “مثيلات” متعددة لشيء واحد. هذا يعني أننا نحتاج فقط إلى كتابة فصل دراسي واحد من فئة “BadGuy” من أجل خلق أكبر عدد ممكن من الأشرار!
ما الأشياء الأخرى التي قد تستخدم فيها الفصول في بايثون؟ يمكن استخدام فئة لوصف أداة معينة داخل برنامج ، مثل مدير النتائج ، أو يمكن استخدامها لوصف الإدخالات في قاعدة بيانات العملاء. في أي وقت تريد إنشاء الكثير من الأمثلة لنفس “الشيء” ، أو في أي وقت تريد فيه التعامل مع تعليمات برمجية معقدة بطريقة معيارية ويمكن تصديرها بسهولة ، تعد الفصول الدراسية خيارًا رائعًا.
كيفية استخدام الطبقات في بايثون
الآن ، أنت تعرف ما هي الصفقة مع الفئات ، قد تتساءل عن كيفية استخدام الفئات في بايثون.
البدء بسيط نسبيًا ، يجب أن تحب بايثون! ستنشئ فئة بنفس الطريقة التي تنشئ بها دالة ، باستثناء أنك ستستخدم “class” بدلاً من “def”. ثم نسمي الفصل ونضيف نقطتين ونضع مسافة بادئة لكل ما يلي.
(لاحظ أن الفئات يجب أن تستخدم حالة الجمل الكبيرة لتمييزها عن المتغيرات والوظائف. وهذا يعني “BadGuy” وليس “badGuy” أو “bad_guy.”)
اقرأ أيضًا: كيفية تحديد دالة بايثون
لذلك ، إذا أردنا إنشاء فئة تمثل عدوًا في لعبة كمبيوتر ، فقد تبدو كما يلي:
class BadGuy: health = 5 speed = 2
هذا الرجل السيئ له خاصيتان (متغيرات) تصفان صحته وسرعة حركته. بعد ذلك ، خارج هذه الفئة ، نحتاج إلى إنشاء كائن BadGuy قبل أن نتمكن من الوصول إلى تلك الخصائص:
bad_guy_one = BadGuy() print(bad_guy_one.health) print(bad_guy_one.speed)
لاحظ أنه يمكننا بسهولة إنشاء bad_guy_two و bad_guy_three ، ثم إظهار كل خاصية من خصائصهما!
bad_guy_one = BadGuy() bad_guy_two = BadGuy() print(bad_guy_one.health) print(bad_guy_two.health) bad_guy_one.health -= 1 print(bad_guy_one.health) print(bad_guy_two.health)
هنا ، قمنا بتغيير قيمة صحة شخص سيء ، ولكن ليس الآخر! لقد قمنا بتحرير واحد نموذج من الرجل السيئ.
فهم الحالات
من أجل الاستفادة حقًا من قوة الفئات في بايثون ، نحتاج إلى فهم حالات و الصانعين. إذا قمت بإنشاء شخصين سيئين من نفس فئة BadGuy ، فسيكون كل واحد منهما “مثيلاً”.
من الناحية المثالية ، قد نرغب في إنشاء شخصين سيئين بصحة بداية مختلفة. علاوة على ذلك ، قد نرغب في تغيير تلك الصحة من في غضون فئة BadGuy.
للقيام بذلك ، نحتاج إلى نوع خاص من العمليات (وظيفة في فئة) تسمى “المُنشئ”.
يتم استدعاء المُنشئ بمجرد إنشاء مثيل جديد لكائن (عند “إنشاء مثيل” للكائن) ويتم استخدامه في الغالب لتحديد المتغيرات من حيث صلتها بذلك محدد مثيل الكائن. رغم ذلك ، يمكنك بالطبع القيام بأشياء أخرى هنا أيضًا: مثل إرسال رسائل ترحيب.
لذلك ، على سبيل المثال:
class BadGuy: def __init__(self, health, speed): print("A new badguy has been created!") self.health = health self.speed = speed bad_guy_one = BadGuy(5, 2) bad_guy_two = BadGuy(3, 5) print(bad_guy_one.health) print(bad_guy_two.health)
هذا الرمز يخلق اثنين من الأشرار. أحدهما قوي ولكنه بطيء (الصحة 5 ، السرعة 2) ، والآخر ضعيف ولكنه سريع (3 ، 5). في كل مرة يتم إنشاء رجل سيء جديد ، تظهر رسالة تخبرنا بحدوث ذلك.
يتم استدعاء طريقة الباني دائمًا __فيه__ وستظل دائمًا “الذات” هي الحجة الأولى. يمكنك بعد ذلك تمرير أي وسيطات أخرى تريد استخدامها لإعداد الكائن الخاص بك عند تهيئته لأول مرة.
مصطلح “الذات” يعني ببساطة أن كل ما تفعله يشير إلى ذلك محدد مثيل الكائن.
كيفية استخدام الدوال في الفصول في بايثون
كما ذكرنا سابقًا ، يُشار إلى الوظيفة في بايثون تقنيًا على أنها طريقة.
يمكننا إنشاء عمليات داخل فئة تمامًا كما نقوم عادةً بإنشاء وظائف ، ولكن هناك نوعان مختلفان من الطرق:
- طرق المثيل
- طرق ثابتة
ستؤثر طريقة المثيل فقط على مثيل الكائن الذي تنتمي إليه. وبالتالي ، يمكننا استخدام هذا كوسيلة أكثر ملاءمة لإلحاق الضرر بالأعداء الأفراد:
class BadGuy: def __init__(self, health, speed): print("A new badguy has been created!") self.health = health self.speed = speed def shoot_badguy(self): self.health -= 1 print("Ouch!") bad_guy_one = BadGuy(5, 2) bad_guy_two = BadGuy(3, 5) def display_health(): print(bad_guy_one.health) print(bad_guy_two.health) display_health() bad_guy_one.shoot_badguy() display_health()
من ناحية أخرى ، تم تصميم طريقة ثابتة للعمل على مستوى العالم. لإنشاء عمليات ثابتة ، نزيل الوسيطة “self” وبدلاً من ذلك نستخدم الامتداد تضمين التغريدة مصمم فقط فوق اسم الطريقة.
في المثال التالي ، أنشأنا طريقة ثابتة لتوليد رقم عشوائي ، ثم نطرح هذا المبلغ من صحة العدو. لا تحتاج الطريقة إلى الارتباط بشكل خاص بمثيل ذلك الكائن ، لذلك يمكنها ببساطة أن تتصرف مثل وظيفة عادية نتمكن من الوصول إليها عندما نستخدم الفصل.
class BadGuy: def __init__(self, health, speed): print("A new badguy has been created!") self.health = health self.speed = speed @staticmethod def random_generator(): import random n = random.randint(1, 5) return n def shoot_badguy(self): self.health -= self.random_generator() print("Ouch!") bad_guy_one = BadGuy(5, 2) bad_guy_two = BadGuy(3, 5) def display_health(): print(bad_guy_one.health) print(bad_guy_two.health) display_health() bad_guy_one.shoot_badguy() display_health()
لاحظ أنه يمكننا أيضًا استخدام السطر التالي في أي وقت في الكود الخاص بنا للحصول على رقم عشوائي:
print(bad_guy_two.random_generator())
إذا أردنا ، لأي سبب من الأسباب ، منع حدوث ذلك ، فنحن ببساطة بحاجة إلى إضافة بادئة إلى اسم طريقتنا بشرطة سفلية مزدوجة.
@staticmethod def __random_generator():
هذه هي كيفية إنشاء طريقة خاصة في Python ، وسوف تمنعنا من الوصول إلى الطريقة خارج تلك الفئة.
إغلاق
أخيرًا ، آخر شيء قد ترغب في القيام به هو وضع فصلك في ملف منفصل. سيؤدي ذلك إلى الحفاظ على الكود مرتبًا ، بينما يتيح لك أيضًا مشاركة الفئات التي أنشأتها بين المشاريع بسهولة.
للقيام بذلك ، ما عليك سوى حفظ الفصل كما هو في ملف جديد:
class BadGuy: def __init__(self, health, speed): print("A new badguy has been created!") self.health = health self.speed = speed @staticmethod def __random_generator(): import random n = random.randint(1, 5) return n def shoot_badguy(self): self.health -= self.__random_generator() print("Ouch!")
تأكد من إعطاء الملف نفس اسم الفصل. في هذه الحالة: “BadGuy.py” هو اسم الملف. يجب أيضًا حفظه في نفس الدليل حيث تحفظ ملف Python الرئيسي.
يمكنك الآن الوصول إلى الفصل وجميع خصائصه وطرقه من أي نص برمجي آخر في Python:
import BadGuy bad_guy_one = BadGuy.BadGuy(5, 2) bad_guy_two = BadGuy.BadGuy(3, 5) def display_health(): print(bad_guy_one.health) print(bad_guy_two.health) display_health() bad_guy_one.shoot_badguy() display_health()
وهناك لديك! هذه هي طريقة استخدام الفئات في بايثون! هذه مهارة قيّمة للغاية وستسمح لك ببناء جميع أنواع الأشياء المدهشة في المستقبل.
في هذه المرحلة ، ربما تكون مستعدًا لنقل مهاراتك إلى المستوى التالي. في هذه الحالة ، لماذا لا تجرب إحدى دورات Python التدريبية الرائعة على الإنترنت:
البرمجة باستخدام Python: سيوفر لك تدريب المطورين الطموحين مقدمة شاملة عن Python ستأخذك من أساسيات الترميز إلى المهارات عالية المستوى التي تعدك لمهنة في تطوير Python. تبلغ تكلفة هذه الدورة عادةً 690 دولارًا أمريكيًا ولكنها متاحة لـ سلطة أندرويد القراء مقابل 49 دولارًا فقط!
بدلاً من ذلك ، يمكنك أن ترى كيف تتلاءم الفصول مع الصورة الكبيرة عن طريق مراجعة دليل المبتدئين الشامل الخاص بنا إلى Python: