تسمح واصفات بايثون بالتحكم فيما يحدث عند قراءة أو تعديل أو حذف سمة كائن. يشرح برنامج تعليمي كيفية استخدامها لبناء ثلاثة أنواع من السمات المتحكم فيها: المُتحقق منها، والمحسوبة، والمحمّلة عند الطلب. ويوضح المنهجية بمثال افتراضي لتطبيق سياحي في اليابان.
الواصف هو فئة تُنفّذ طرقًا مثل __get__، و__set__، أو __delete__، والتي تحدد سلوك السمة. ليست كلها إلزامية. تشير الطريقة __set_name__، التي أُدخلت مع بايثون 3.6، إلى الواصف اسم السمة المرتبط بها، مما يسمح بتخزين القيمة في __dict__ للكائن الأصلي دون تعارض في الأسماء. وفقًا للمؤلف، يتجنب هذا النهج إثقال الكود باستخدام الديكورات @property ووظائف الـ getters والـ setters.
سمات مُتحقق منها، أو محسوبة، أو كسولة
المثال الأول، المسمى ValidatedRating، يتحقق من أن التقييم هو رقم (صحيح أو عشري) يقع بين قيمة دنيا وقيمة قصوى، محددة افتراضيًا بـ 1.0 و 5.0. في حالة قيمة غير رقمية، يرفع TypeError؛ وإذا كانت القيمة خارج النطاق، ValueError.
الثاني، ComputedUSDPrice، يُستخدم لعرض سعر بالدولار الأمريكي مخزّن بالين الياباني (JPY). يحسب التحويل على الفور، بناءً على سعر صرف 0.0067، مذكور في الكود كتقريب. بما أن السمة للقراءة فقط، فإن أي محاولة للكتابة تثير AttributeError.
الثالث، LazyItinerary، ينطبق على البيانات المكلفة إنتاجها، مثل قراءة ملف JSON كبير أو الاستعلام عن قاعدة بيانات لمواعيد شينكانسن، قطارات اليابان فائقة السرعة. لا يحسب الواصف القيمة إلا عند أول استعلام، ويضعها في __dict__ للنسخة، ثم ينسحب. تقرأ الاستفسارات اللاحقة هذه القيمة مباشرة. في المثال، تم تضمين محاكاة لزمن استجابة قدره ثانية واحدة.
التطبيق العملي مع زيارة كيوتو
يتم جمع هذه الواصفات الثلاثة في فئة JapanTour. أثناء التهيئة مع وجهة «كيوتو»، وسعر 45000 JPY، وتقييم 4.8، يتم تشغيل التحقق فورًا. عندما يحاول المؤلف بعد ذلك تعيين القيمة 6.0 للتقييم، يتم اعتراض الاستثناء وعرض الرسالة «يجب أن يكون التقييم بين 1.0 و 5.0.».
أول استعلام عن المسار يعرض رسالة محاكاة الطلب، ثم برنامج لمدة ثلاثة أيام: الوصول والتسجيل في كيوتو، وجولة إرشادية للمعابد وتذوق طعام الشارع، ثم المغادرة بشينكانسن. في الاستعلام الثاني، لا تظهر الرسالة: تُقرأ القيمة مباشرة من النسخة.
يختتم المقال بأن هذه الأنواع الثلاثة من الواصفات تعزز متانة سمات الفئة، من خلال ضمان سلامة البيانات، وحساب القيم المشتقة، وإدارة العمليات المكلفة على التوالي.





