كتاب "كيف تعمل بايثون. دليل للمطورين والمبرمجين والمهتمين "

الصورة مرحبا habrozhiteli! أصدرنا مؤخرًا كتابًا جديدًا عن بيثون. نحن نقدم لك أن تتعرف على الفور على مواد تقصي الحقائق.

مقتطفات. 7.4. باستخدام IDLE


نظرًا لأن IDLE يتضمن REPL ، فيمكنك إدخال الرمز أعلاه وتحليله مباشرةً في REPL. ومع ذلك ، يمكنك أيضًا كتابة التعليمات البرمجية وتشغيلها وتحليلها من REPL. لتجربة هذه الميزة ، افتح ملفًا جديدًا وقم بتضمين التعليمة البرمجية التالية فيه:

name = "Matt" first = name age = 1000 print(id(age)) age = age + 1 print(id(age)) names = [] print(id(names)) names.append("Fred") print(id(names)) 

احفظ الكود في ملف يسمى iden.py. قم بتشغيل الملف. في IDLE ، اضغط المفتاح F5 للقيام بذلك. سيتم عرض أربعة أرقام في REPL. الأولان سيكونان مختلفين ؛ هذا يشير إلى أن الأعداد الصحيحة غير قابلة للتغيير. آخر رقمين متشابهان. هذا لأنه على الرغم من تغيير قائمة الأسماء ، يبقى المعرف كما هو. بشكل عام ، هذه الحقيقة ليست بالأمر الجديد.

الآن الشيء الأكثر إثارة للاهتمام: إذا قمت بإدخال الأمر dir () في REPL ، فسوف يعرض قائمة من المتغيرات. سترى أن المتغيرات العامة من iden.py متاحة الآن.

يوفر REPL في IDLE إمكانية الوصول إلى جميع المتغيرات العامة. يمكنك البحث عن الأسماء والأسماء وحتى استدعاء الوظائف أو الأساليب - على سبيل المثال ، names.append ("George").

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

الصورة

الصورة

الصورة

مقتطفات. 22. فئة فرعية


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

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

فيما يلي فئة Chair6 ، وهي فئة فرعية من CorrectChair:

 >>> class Chair6(CorrectChair): ... max_occupants = 6 

ملاحظة: يتم تضمين الفئة الأصل من CorrectChair بين قوسين بعد اسم الفئة. لاحظ أن Chair6 لا يحدد مُنشئ في نصه ، ولكن يمكنك إنشاء مثيلات من الفصل:

 >>> sixer = Chair6(76) 

كيف تنشئ بايثون كائنًا إذا لم يتم تحديد مُنشئ في الفصل؟ إليك ما يحدث: عندما يبحث Python عن طريقة .__ init__ ، يبدأ البحث بالرئيس 6. نظرًا لأن الفئة Chair6 تحتوي فقط على سمة max_occupants ، فلن تجد Python طريقة .__ init__ هنا. ولكن نظرًا لأن Chair6 هو فئة فرعية من CorrectChair ، فإنه يحتوي على سمة __bases__ التي تسرد الفئات الأساسية الملخصة في المجموعة:

الصورة

الصورة

 >>> Chair6.__bases__ (__main__.CorrectChair,) 

ثم يبحث Python عن المنشئ في الفصول الأساسية. يجد المنشئ في CorrectChair ويستخدمه لإنشاء فصل جديد.

يحدث نفس البحث عند استدعاء .load لمثيل. لا يحتوي المثيل على سمة تتوافق مع اسم الأسلوب ، لذلك يتحقق Python من فئة المثيل. لا يحتوي Chair6 على طريقة .load أيضًا ، لذلك تبحث Python عن سمة في الفئة الأساسية CorrectChair. هنا ، يتم استدعاء أسلوب .load بقيمة كبيرة جدًا ، مما يؤدي إلى حدوث خطأ ValueError:

 >>> sixer.load(7) Traceback (most recent call last): File "/tmp/chair.py", line 30, in <module> sixer.load(7) File "/tmp/chair.py", line 13, in load new_val = self._check(self.count + number) File "/tmp/chair.py", line 23, in _check number)) ValueError: Invalid count:7 

تعثر Python على الطريقة في الفئة الأساسية ، ولكن استدعاء الأسلوب ._check ينتج عنه خطأ ValueError.

22.1. عد توقف


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

افترض أن كل مكالمة إلى .load تستدعي دالة تُرجع إشارة منطقية إلى ما إذا كان التوقف قد حدث أم لا. في معلمات الوظيفة ، يتم نقل عدد المتزلجين وكائن الكرسي.

التالي هو الفصل الذي يحصل على الدالة is_stalled في المنشئ. سيتم استدعاء هذه الوظيفة في كل مرة يتم استدعاء .load:

 >>> class StallChair(CorrectChair): ... def __init__(self, id, is_stalled): ... super().__init__(id) ... self.is_stalled = is_stalled ... self.stalls = 0 ... ... def load(self, number): ... if self.is_stalled(number, self): ... self.stalls += 1 ... super().load(number) 

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

 >>> import random >>> def ten_percent(number, chair): ... """Return True 10% of time""" ... return random.random() < .1 

يمكنك الآن إنشاء مثيل عن طريق تحديد دالة ten_percent كمعلمة is_stalled:

 >>> stall42 = StallChair(42, ten_percent) 

22.2. سوبر


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

 super().__init__(id) 

عند الاتصال بشكل ممتاز داخل الطريقة ، يمكنك الوصول إلى الفئة الأصل الصحيحة.

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

الصورة

تحتوي طريقة .load أيضًا على استدعاء super:

 def load(self, number): if self.is_stalled(number, self): self.stalls += 1 super().load(number) 

في الأسلوب .load ، يمكنك استدعاء الدالة is_stalled لتحديد ما إذا كان المصعد قد توقف ، ثم نقل التحكم في وظيفة .load الأصلية من CorrectChair باستخدام super.

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

عن المؤلف


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

وقد ألقى محاضرات ومحاضرات تدريبية في مؤتمرات مثل ستراتا ، و SciPy ، و SCALE ، و PyCON ، و OSCON ، وكذلك في مؤتمرات المستخدمين المحليين. يعتمد هيكل ومواد هذا الكتاب على خبرته العملية في تدريس بيثون. يقوم Matt بشكل دوري بنشر معلومات مفيدة متعلقة بيثون على Twitter (__mharrison__).

المحررين العلميين


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

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

»يمكن الاطلاع على مزيد من المعلومات حول الكتاب على موقع الناشر
» المحتويات
» مقتطفات

ل Habrozhitelami خصم 20 ٪ على القسيمة - بيثون .

Source: https://habr.com/ru/post/ar433534/


All Articles