لنكن أنيقًا: كيفية إنشاء وحدات وفئات باستخدام Python

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

يقول ما؟

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

إن أبسط طريقة لوصف الفئات وكيفية استخدامها هي:

تخيل أن لديك قوى عظيمة. تقوم بإنشاء نوع ("فئة").

ثم تقوم بإنشاء سمات لتلك الأنواع ("الخصائص") - الطول والوزن والأطراف واللون والقوى وما إلى ذلك.

ثم تقوم بإنشاء مثيل لتلك الأنواع - Fido the dog و Drogon من Game of Thrones وما إلى ذلك. ثم تعمل مع هذه الحالات:

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

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

الآن ، ربما تكون قد أدركت أن هذه طريقة للتصنيف والتجميع ، تشبه طريقة تعلم البشر:

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

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

إنشاء واستخدام الفصول هو في الأساس:

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

النقطة الأساسية هنا هي أن الفئات هي كائنات يمكنها إنتاج مثيلات لتلك القوالب ، والتي يمكن تطبيق العمليات والأساليب عليها. إنها طريقة ممتازة لوضع تصور وتنظيم وبناء تسلسل هرمي لأي منظمة أو عملية.

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

قد يكون أحد الأمثلة لعبة فيديو تقوم بإنشائها. يمكن أن تكون كل شخصية "فئة" ، لها سماتها الخاصة التي تتفاعل مع حالات من الفئات الأخرى. قد يتفاعل الملك جورج من فصل "الملك" مع Court Jester Funnyman من فصل "Clown" ، وهكذا. قد يكون للملك فئة "خادم" ملكي ، وفئة "خادم" سيكون لها دائمًا فئة "ملك" ، على سبيل المثال.

هذا ما سنفعله:

  • إنشاء فصل واستخدامه
  • قم بإنشاء وحدة ونقل إنشاء الفصل والبدء في الوحدة
  • استدعاء الوحدة في برنامج جديد لاستخدام الفصل

الكود متاح في GitHub هنا.

#TSB - Create Class in Python - rocket positions (x,y) and graph
#some items and comments bolded to call attention to processimport matplotlib.pyplot as plt
class Rocket(): def __init__(self, x=0, y=0): #each rocket has (x,y) position; user or calling function has choice #of passing in x and y values, or by default they are set at 0 self.x = x self.y = y def move_up(self): self.y += 1 def move_down(self): self.y -= 1 def move_right(self): self.x += 1 def move_left(self): self.x -= 1
#Make a series of rockets - x,y positions, I am calling it rocketrockets=[]rockets.append(Rocket())rockets.append(Rocket(0,2))rockets.append(Rocket(1,4))rockets.append(Rocket(2,6))rockets.append(Rocket(3,7))rockets.append(Rocket(5,9))rockets.append(Rocket(8, 15)) #Show on a graph where each rocket is
for index, rocket in enumerate(rockets): #original position of rockets print("Rocket %d is at (%d, %d)." % (index, rocket.x, rocket.y)) plt.plot(rocket.x, rocket.y, 'ro', linewidth=2, linestyle="dashed", markersize=12) #move the 'rocket' one up rocket.move_up() print("New Rocket position %d is at (%d, %d)." % (index, rocket.x, rocket.y)) #plot the new position plt.plot(rocket.x, rocket.y, 'bo', linewidth=2, linestyle="dashed", markersize=12) #move the rocket left, then plot the new position rocket.move_left() plt.plot(rocket.x, rocket.y, 'yo', linewidth=2, linestyle="dashed", markersize=12)
#show graph legend to match colors with positionplt.gca().legend(('original position','^ - Moved up', '< - Moved left'))plt.show()#plt.legend(loc='upper left')

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

ما هي الوحدة ولماذا نحتاجها؟

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

على سبيل المثال ، عندما تستدعي "matplotlib.plot" ، فأنت تستدعي وحدة الحزمة. إذا لم يكن لديك هذه الوحدة ، فسيتعين عليك تحديد وظيفة الحبكة في كل برنامج يستخدم مخطط الرسم البياني.

من وثائق بايثون:

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

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

لاحظ ما فعلناه أعلاه:

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

إليك كيفية استخدام الوحدة الجديدة لإعادة كتابة نفس البرنامج من الجزء الأول. لاحظ في قسم الاستيراد في البداية أننا نقوم الآن باستيراد simple_module1الوحدة التي أنشأناها للتو:

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

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

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

Still wondering about classes? Ok, let’s get “classy” — here’s another simple illustration. We will call this class “Person”. It has only two properties — name and age. We will then add an instance of this with a person’s name and age, and print it. Depending on what your objective is, you can imagine all the other details you might add — for example, marital status and location preferences for a social networking app, job experience in years and industry specialization for a career related app. Press the little triangle below to see it work.

So there you have it. You can create many different classes, with parent classes, sub-classes and so on. Thanks for reading — please clap if you liked it. Here are some other references if you would like to learn more:

  • Python documentation — Classes
  • Python Object Oriented — Tutorials Point
  • فئات وكائنات - learnpython.org